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