SimpleDateFormat 带纳秒时间的处理

本文介绍了在JDK1.8及以下版本中如何处理带有纳秒精度的时间字符串。当使用SimpleDateFormat类进行格式化时,对于包含纳秒的时间字符串会遇到问题。文章提供了一种解决方案,通过简化时间戳的小数部分来实现毫秒级精度的格式化。

在JDK 1.8以下版本,对于带纳秒的时间串使用SimpleDateFormat 类进行格式化:

2018-05-18T20:20:53.420658997+08:00

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSSXXX");

你会发现,结果与期望大相径庭。

如果只处理到毫秒(即.后只有3位小数),那倒没有问题,使用下面的模式可以搞定:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");

但是对于超过3位小数的则不可用了,见参考网页。

最简单的处理,精简秒后的时间位数,只保留3位(通常情况下够用,对精度影响较小):

	static String shortenTimeStr(String timestr){
		String[] parts = timestr.split("\\.");
		String[] parts2 = parts[1].split("\\+");
		String timestr2 = parts[0] + "." + parts2[0].substring(0, 3) + "+" + parts2[1];
		System.out.println("timestr2:" + timestr2);
		return timestr2;
	}
然后,再使用上述的SimpleDateFormat模式进行转换。

如果有谁有更好的方法,望不吝赐教。


参考:

1、Java date parsing with microsecond or nanosecond accuracy. https://stackoverflow.com/questions/30135025/java-date-parsing-with-microsecond-or-nanosecond-accuracy?rq=1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值