2017-01-01 00:08:57.231 格式等于 yyyy-MM-dd.HH:mm:ss?

2017-01-01 00:08:57.231 format equals yyyy-MM-dd.HH:mm:ss?

我对这些时间戳的格式有点困惑。有人告诉我要使用的格式是 yyyy-MM-dd.HH:mm:ss,但所有时间戳都是这样显示的 2017-01-01 00:08:57.2312017-01-01 07:43:36.348 , 或 2017-01-01 13:25:55.683。我不明白为什么在我应该使用的格式只有 三个个时间段。这些日期时间戳实际上不是 yyyy-MM-dd.HH:mm:ss 的格式吗?

这些时间戳采用 yyyy-MM-dd HH:mm:ss:ms 格式,最后三位数字为毫秒。

不,您的怀疑是正确的,您的示例 date-time 字符串 不是 格式 yyyy-MM-dd.HH:mm:ss。 dd 和 HH 之间的点一定是一个简单的错误,它应该是 space 因为在时间戳字符串中日期和时间之间有一个 space。此外,您的所有示例字符串都包含毫秒:在 00:08:57.231 中,您有 57 秒和 231 毫秒,或者如果您愿意,可以有 57.231 秒,因此最后一部分也可以称为秒的小数部分。

    DateTimeFormatter formatter
            = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSS");
    String timestampString = "2017-01-01 00:08:57.231";
    LocalDateTime dateTime = LocalDateTime.parse(timestampString, formatter);
    System.out.println(dateTime);

输出:

2017-01-01T00:08:57.231

对于好奇的书呆子:可以解析字符串,或者更准确地说是大部分字符串,使用给定的格式,只将点更正为 space:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    String timestampString = "2017-01-01 00:08:57.231";
    LocalDateTime dateTime = LocalDateTime.from(
            formatter.parse(timestampString, new ParsePosition(0)));

在这种情况下,结果没有毫秒:

2017-01-01T00:08:57

不过,我看不出你为什么要这个。

避免使用 SimpleDateFormat

在评论中,您提供了一个使用 SimpleDateFormat class 的片段。这个 class 不仅早已过时,而且出了名的麻烦。我看不出你为什么要使用它。相反,我使用 java.time,现代 Java 日期和时间 API。根据我的经验,使用它要好得多。

链接

Oracle tutorial: Date Time explaining how to use java.time. You may especially want to study the section Parsing and Formatting.