SimpleDateFormat中的日期字符串解析不正确

Pra*_*kar 5 java sql android date

我正在尝试将UTC格式的字符串格式转换为日期对象,这会导致转换关闭几分钟.

SimpleDateFormat fullDateFormater = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS", Locale.US);
fullDateFormater.setTimeZone(TimeZone.getTimeZone("UTC"));
Run Code Online (Sandbox Code Playgroud)

在解析日期字符串之前 - 2014-07-07T18:24:23.788810

解析日期之后是 Tue Jul 08 00:07:31 GMT+05:30 2014

正确的日期转换是 Tue Jul 07 23:54:23 GMT+05:30 2014

转换时间差异大约为12-13分钟.我观察到转换中10分钟的范围存在差异.

什么出了什么问题?

Jon*_*eet 13

SSSSSS 正如您所料,正在解析数毫秒 - 而不是微秒.

788810毫秒是13分8秒和810毫秒.所以你的结果实际上是2014-07-07T18:27:31.810.

是的,这是一个非常愚蠢的API设计.它将使很多更有意义S...S的意思,而不是"毫秒","几分之一秒内" -但它从大约预Java的8日期/时间API的最糟糕的事情远远:(

我不认为有一种方法来解析与微秒SimpleDateFormat- Java的时间精度的API预Java的8毫秒是无论如何-所以我认为你只需要砍掉后三位与substring使用解析它SSS在格式字符串的结尾.

如果您使用的是Java 8,我强烈建议您接受java.time,我相信这可以解决这个问题.(我没有看过它的解析API,但我相信它会好的.)