LocalDateTime转换字符串格式问题

背景

负责修改的模块有一个实时工况功能,根据时间排序查询数据,处理后返回给前台做图表展示。测试的时候同事发现了图表中经常有数据非常突兀,本来平滑的图表变成了T字形
在这里插入图片描述

问题排查

查看数据发现其他格式都是’yyyy-MM-dd HH:mm:ss’,而有问题的数据为’yyyy-MM-ddTHH:mm’。这里其实数据都是这种带T的,只把’yyyy-MM-ddTHH:mm:ss’的数据转换为正常格式的数据。但是有问题的数据是没有秒的,所以我转换的时候抛出转换异常,然后展示为原来的格式。因为排序时字母T比空格顺序靠后,所以即使这些数据的小时值为6点,7点,也要比23点的数据靠后,造成了T数据的形成

我以为是硬件的问题,跟同事反应后回复说硬件传的是二进制。突然想起来这个功能是我根据二进制自己截取字节拼接的时间,于是查看代码,如下

 LocalDateTime time = LocalDateTime.of(getUint8(data[offset]) + 2000, month, day,
		getUint8(data[offset + 3]), getUint8(data[offset + 4]), getUint8(data[offset + 5]));

我根据与硬件协议规定的字节去使用LocalDateTime来转换时间,最后使用toString()方法转换为字符串,看来是如果秒为0的话,那么转换的格式就为‘yyyy-MM-ddTHH:mm’,而不是’yyyy-MM-dd-dd-THH:mm:ss’

解决办法

知道问题所在就好办了,使用DateTimeFormatter进行强制格式转换即可,代码如下

LocalDateTime time = LocalDateTime.of(getUint8(data[offset]) + 2000, month, day,
		getUint8(data[offset + 3]), getUint8(data[offset + 4]), getUint8(data[offset + 5]));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String time = time.format(formatter))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值