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

posted @ 2018-05-21 12:02  hongweigg  阅读(72)  评论(0编辑  收藏  举报