我的时间戳看起来像这样:
2015-03-21T11:08:14.859831
2015-03-21T11:07:22.956087
我读了Wiki article on ISO 8601,但没有得到最后6位的含义。
我尝试使用"yyyy-MM-dd'T'HH:mm:ss.sss"
或"yyyy-MM-dd'T'HH:mm:ss.ssssss"
将其降低到毫秒。它是否比毫秒更精确 - 直到微秒?
答案 0 :(得分:7)
它是否比毫秒更精确?
是的,在这种情况下,这是微秒。
ISO-8601实际上并未指定最大精度。它声明:
如果特定应用需要,可以包括小时,分钟或秒的小数部分。如果包含小数部分,则应省略低阶时间元素(如果有),小数部分应从整数部分除以ISO 31-0中指定的小数符号,即逗号[,]或句号[ ]。其中,逗号是首选标志。如果数字的大小小于1,则小数符号前面应按照3.6的两个零。
根据申请,交换方应同意小数部分的位数。 [...]
(你很少实际将逗号视为小数点分隔符 - 至少,这是我的经验。)
不幸的是,根据我的经验,在Java 7中解析这样的值很棘手 - 没有“只消耗小数位并做正确的事情”的格式说明符。您可能会发现在解析之前需要手动删除尾随的3位数字,以毫秒为单位。
由于Java 8支持的精度为纳秒级,因此它更加简单 - 事实上,内置的ISO格式化程序可以解析它:
import java.time.*;
import java.time.format.*;
public class Test {
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;
System.out.println(LocalDateTime.parse("2015-03-21T11:07:22.956087", formatter));
}
}