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

Java 2017-01-01 00:08:57.231格式是否等于yyyy-MM-dd.HH:MM:ss?,java,datetime,datetime-format,sqldatetime,Java,Datetime,Datetime Format,Sqldatetime,我有点困惑这些时间戳是什么格式的。我被告知使用的格式是yyyy-MM-dd.HH:MM:ss,但所有的时间戳都是这样的2017-01-01 00:08:57.231,2017-01-01 07:43:36.348,或2017-01-01 13:25:55.683。我不明白为什么我的实际数据中有四个时间段?:Hour:Minute:Second,而我应该使用的格式只有三个时间段。这些日期时间戳的格式实际上不是yyyy-MM-dd.HH:MM:ss?这些时间戳的格式是yyy-MM-dd HH:MM:

我有点困惑这些时间戳是什么格式的。我被告知使用的格式是
yyyy-MM-dd.HH:MM:ss
,但所有的时间戳都是这样的
2017-01-01 00:08:57.231
2017-01-01 07:43:36.348
,或
2017-01-01 13:25:55.683
。我不明白为什么我的实际数据中有四个时间段
?:Hour:Minute:Second
,而我应该使用的格式只有三个时间段。这些日期时间戳的格式实际上不是
yyyy-MM-dd.HH:MM:ss

这些时间戳的格式是
yyy-MM-dd HH:MM:ss:ms
格式,最后三位是毫秒。

不,您的怀疑是正确的,示例日期时间字符串的格式不是
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

不过,我看不出你有什么理由想要这个

避免使用SimpleDataFormat 在注释中,您给出了一个使用
simpleDataFormat
类的代码段。这个类不仅早已过时,而且还出了名的麻烦。我看不出你为什么要用它。相反,我使用的是
java.time
,现代java日期和时间API。以我的经验来看,和他一起工作要好得多

链接
解释如何使用
java.time
。你可能特别想学习。

我不确定我是否理解你的问题……日期和时间之间没有点,秒后有毫秒。那么它如何与日期和时间之间有点的格式
yyyy-MM-dd.HH:MM:ss
匹配呢,秒后哪一个没有毫秒?
2017-01-01 13:25:55.683
2017-01-01 00:08:57.231
格式为
yyyy-MM-dd.HH:MM:ss.SSS
尾随的3
S
S是分数seconds@xtratic我仍然无法使用该格式将字符串2017-01-01 13:25:55.683解析为日期yyyy-MM-dd.HH:MM:ss.SSS。@xtratic SimpleDateFormat格式化程序=新的SimpleDateFormat(“yyyy-MM-dd.HH:MM:ss:SSS”);格式化程序解析(“2017-01-01 13:25:55.683”);抛出不可接受的日期:“2017-01-01 13:25:55.683”为什么投票失败?这个答案可能很简短,也没有很好的解释,但它至少切中要害,完全正确。