解析 Java 中日期的毫秒分数

Parsing milliseconds fraction of date in Java

我正在 Java 中使用此模式解析日期(从服务器获取):"yyyy-MM-dd'T'HH:mm:ss.SSS".

传入的字符串可能属于以下类型:

2015-01-01T00:00:00.561
2015-01-01T00:00:00.5

我的问题是关于毫秒分数的。我无法确定第二个字符串中的 .55 还是 500 毫秒。因为当我使用我的模式解析它时,我得到 500 毫秒。似乎没问题,但需要仔细检查服务器端是否有 trim 那些零的共同合同。我不会询问服务器是否返回 2015-01-01T00:00:00.500,但是对于 .5 我不确定服务器端 5500 ms.

是什么

更新:

我刚和服务器团队谈过,他们确认 .5.500

@dana 说得好:1.5 是 1.500 但是要确保有简单的方法来验证。只需在您的日志文件中查找一些记录集,您就可以轻松查看序列以及这些序列中的毫秒数。 我假设那将是

2015-01-01T00:00:00.46
2015-01-01T00:00:00.5
2015-01-01T00:00:00.561
2015-01-01T00:00:00.57
2015-01-01T00:00:00.678

但不是您提供的顺序。 从这个例子中你可以清楚地看到这对于毫秒的意义在任何地方都是相同的。

很容易在一个日志文件中看到它。如果你有更多,那么它们可能来自不同的服务器,你无法比较时间。根据定义,不同的服务器具有不同的时间。尤其是毫秒。 即使日志文件来自同一个盒子但不同的应用程序,从字面上比较时间仍然不是一个好主意。一个日志文件可能会被锁定几毫秒,因此您的时间会有所不同。您所能做的就是对来自一个来源的文件进行关系比较 (early/later)。所有其他情况都可能无效。

ISO 8601

该模式 YYYY-MM-DDTHH:MM:SS.SSS±HH:MM 是由 ISO 8601 标准定义的字符串格式。

您的特定用法省略了 UTC 的偏移量(末尾的 plus/minus)。如果没有偏移量,该值为 "local time" 表示它指的是任何位置,例如 "Christmas starts at 2015-12-25T00:00:00".

Joda-Time library and java.time package 都使用 ISO 8601 格式作为它们在 generating/parsing 字符串中的默认格式。

小数点

是的,点后面的数字确实只是一个小数。点是小数点。 0.5等值与0.500相同,均表示半秒,500毫秒。

因此,2015-01-01T12:34:56.72015-01-01T12:34:56.700 相同。