ISO 8601中的时间戳 - 最后6位yyyy-MM-dd'T'HH:mm:ss。?

时间:2015-07-17 13:45:01

标签: java datetime timestamp unix-timestamp iso8601

我的时间戳看起来像这样:

    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"将其降低到毫秒。它是否比毫秒更精确 - 直到微秒?

1 个答案:

答案 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));

    }
}