前言
这一节主要是介绍进行一个日期函数处理所踩坑的一个记录。这个SimpleDateFormat
类大家都很熟悉,也是之前非常喜欢用的时间处理累类。平常可能会处理到的就是秒级别或者三位的毫秒级别。很少有接触到纳秒级别,因为用成了习惯,所以今天突然碰到一个使用纳秒的数据。然后就产生了一系列的异常。
代码示例
下面这个例子主要是介绍日期处理的类。
代码语言:javascript复制 public static void main(String[] args) {
String dateTimeString = "2024-02-07 13:58:08.424527802 0800";
// dateTimeString = "2024-02-07 13:58:08.424 0800";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSSSS Z");
try {
Date date = dateFormat.parse(dateTimeString);
long timestamp = date.getTime();
System.out.println("默认格式:" dateTimeString);
System.out.println("日期时间:" dateFormat.format(date));
System.out.println("时间戳为:" timestamp);
} catch (Exception e) {
System.out.println("日期时间解析失败:" e.getMessage());
}
}
这是上述代码收藏的结果,显然两次的时间出现了不一致的情况。
代码语言:javascript复制默认格式:2024-02-07 13:58:08.424527802 0800
日期时间:2024-02-12 11:53:35.000000802 0800
时间戳为:1707710015802
支持毫秒
将纳秒转换为毫秒后,代码能够正确识别和处理各种毫秒输入,但对之前输入的六位数微秒测试却错误地显示了错误结果。
时间格式yyyy-MM-dd HH:mm:ss.SSS Z
默认格式:2024-02-07 13:58:08.424 0800
日期时间:2024-02-07 13:58:08.424 0800
时间戳为:1707285488424
解决
随后,我查找了一些相关的博客来进一步了解如何解决这个问题。我发现,使用JAVA 8的一些新的时间管理DateTimeFormatter类,可以更完美地解决这个问题。这个类可以对时间进行更精确的格式化,这样就可以确保时间的准确性。果然,我还是应该跟着jDK的版本编码,这样才能保证代码的可维护性和可读性。
使用DateTimeFormatter
类之后
public static void main(String[] args) {
String dateTimeString = "2024-02-07 13:58:08.424527802 0800";
dateTimeString = "2024-02-07 13:58:08.424527802 0800";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSSSS Z");
LocalDateTime dateTime = LocalDateTime.parse(dateTimeString, formatter);
System.out.println("格式化后的日期时间:" dateTime);
ZoneId zoneId = ZoneId.systemDefault(); // 获取系统默认时区,您也可以指定其他时区
ZonedDateTime zonedDateTime = dateTime.atZone(zoneId);
long timestamp = zonedDateTime.toInstant().toEpochMilli();
System.out.println("格式化后的time:" timestamp);
}
数据开始变得正确起来。
代码语言:javascript复制格式化后的日期时间:2024-02-07T13:58:08.424527802
格式化后的time:1707285488424
总结
近期我在处理日期时间数据时,遇到了一个很令人费解的问题。我发现我平时经常使用的一个日期处理类,它的精度居然不支持纳秒级别,这让我感到非常困惑,因为我之前完全没有意识到这个问题。因此,我觉得非常有必要将这个踩坑记录下来,以便将来避免类似的问题。
引用
https://blog.csdn.net/xiaolegeaizy/article/details/124877672
最后
点赞关注评论一键三连,每周分享技术干货、开源项目、实战经验、国外优质文章翻译等,您的关注将是我的更新动力
我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!