【问题标题】:2017-01-01 00:08:57.231 format equals yyyy-MM-dd.HH:mm:ss? [closed]2017-01-01 00:08:57.231 格式等于 yyyy-MM-dd.HH:mm:ss? [关闭]
【发布时间】:2018-04-05 19:08:46
【问题描述】:

我有点困惑这些时间戳的格式。有人告诉我要使用的格式是yyyy-MM-dd.HH:mm:ss,但所有的时间戳都像这样2017-01-01 00:08:57.2312017-01-01 07:43:36.3482017-01-01 13:25:55.683。我不明白为什么当我应该使用的格式只有 三个 时间时,我拥有的实际数据中有 四个 部分 ?:Hour:Minute:Second部分。这些日期时间时间戳实际上不是yyyy-MM-dd.HH:mm:ss 的格式吗?

【问题讨论】:

  • 我不确定我是否理解您的问题...
  • 嗯,日期和时间之间没有点,秒后还有毫秒。那么它如何匹配yyyy-MM-dd.HH:mm:ss 格式,在日期和时间之间一个点,而没有在秒后有毫秒?
  • 2017-01-01 13:25:55.6832017-01-01 00:08:57.231 的格式为 yyyy-MM-dd.HH:mm:ss.SSS 后面的 3 个 Ss 是小数秒
  • @xtratic 我似乎仍然无法使用格式 yyyy-MM-dd.HH:mm:ss.SSS 将字符串 2017-01-01 13:25:55.683 解析为日期。
  • @xtratic SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd.HH:mm:ss:SSS"); formatter.parse("2017-01-01 13:25:55.683");抛出无法解析的日期:“2017-01-01 13:25:55.683”

标签: java datetime datetime-format sqldatetime


【解决方案1】:

不,您的怀疑是正确的,您的示例日期时间字符串不是格式为yyyy-MM-dd.HH:mm:ss。 dd 和 HH 之间的点一定是一个简单的错误,它应该是一个空格,因为时间戳字符串中的日期和时间之间有一个空格。此外,您的所有示例字符串都包括毫秒:在 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

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

    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 类的 sn-p。这个类不仅过时了,而且出了名的麻烦。我看不出你为什么要使用它。相反,我使用的是现代 Java 日期和时间 API java.time。根据我的经验,使用它要好得多。

链接

Oracle tutorial: Date Time 解释如何使用java.time。你可能特别想学习the section Parsing and Formatting

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 为什么投反对票?这个答案可能很简短,解释得不是很好,但至少是切中要害并且完全正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2018-09-02
    相关资源
    最近更新 更多