解析带时区的 3 位数格式的字符串时间戳,后跟 'Z'

Parsing string timestamp with time zone in 3-digit format followed by 'Z'

在 Hadoop 基础设施(Java-based)中,我得到的时间戳是这种格式的字符串值:

2015-10-01T04:22:38:208Z
2015-10-01T04:23:35:471Z
2015-10-01T04:24:33:422Z

我在 examples 之后为 SimpleDateFormat Java class 尝试了不同的模式,但没有成功。

将 'T' 替换为 ' ',将 'Z' 替换为 '',然后

"yyyy-MM-dd HH:mm:ss:ZZZ"
"yyyy-MM-dd HH:mm:ss:zzz"
"yyyy-MM-dd HH:mm:ss:Z"
"yyyy-MM-dd HH:mm:ss:z"

无需更换,

"yyyy-MM-dd'T'HH:mm:ss:zzz'Z'"

事实上,这种格式并没有在示例中列出。我应该用它做什么? 也许那 3 位数字是毫秒,时间是 UTC,像这样:"yyyy-MM-dd'T'HH:mm:ss.SSSZ"?但它仍然应该看起来像“2015-11-27T10:50:44.000-08:00”作为标准化格式 ISO-8601。

也许,这种格式首先没有被正确解析?

我使用 Ruby、Python、Pig、Hive 来处理它(但不是直接 Java),所以任何例子都有帮助。谢谢!

非常 强烈怀疑最后三位数字与时区无关,而是毫秒,是的,Z 表示 UTC。他们使用 : 而不是 . 作为秒和毫秒之间的分隔符,这有点奇怪,但这有时会发生。

在那种情况下你想要

"yyyy-MM-dd'T'HH:mm:ss:SSSX"

...或使用

"yyyy-MM-dd'T'HH:mm:ss:SSS'Z'"

并将您的 SimpleDateFormat 的时区明确设置为 UTC。