日期字符串上的 Z 结尾是什么,例如 2014-01-01T00:00:00.588Z

问题描述 投票:0回答:4

我正在使用 java 从数据库中获取日期(日期应该始终是

2014-01-01T00:00:00
)。 我得到的返回时间如下:
2014-01-01T00:00:00.588Z

我的问题是,最后的

588Z
是什么?如果检索是在不同的时区完成的,这个数字会有所不同吗?即数字 588 在不同时区会是不同的数字吗?

感谢您给我提供的任何帮助。

java date datetime datetime-format
4个回答
41
投票

Z
代表零 UTC 偏移量

如果时间是 UTC,则在时间后面直接添加 Z,不加空格。
Z 是零 UTC 偏移的区域指示符。
因此,“09:30 UTC”表示为“09:30Z”或“0930Z”,而“14:45:15 UTC”将表示为“14:45:15Z”或“144515Z”。

Z
之前的部分转换为秒的小数部分;在这里,
588

从上面的问题来看,

00:00:00.588
的意思是“午夜过后大约半秒”,句点后的最后三位数字为
588
,翻译为:毫秒

...更多详细信息此处(ISO 8601 标准)。


5
投票

Z 代表 UTC(即 GMT,但标准):http://en.wikipedia.org/wiki/Cooperative_Universal_Time


5
投票

Z 是 UTC 时区的简写。


0
投票

我的问题是,最后的“588Z”是什么?这个数字会 检索是在不同时区完成的吗?即会 数字 588 在不同时区可能是不同的数字。

接受的答案是正确的。

Z
表示
+00:00
的时区偏移,即距格林威治/UTC 的零偏移。因此,您可以将像
2014-01-01T00:00:00.588Z
这样的日期时间称为 UTC 日期时间。

部分

.588
是秒的一小部分。时区偏移仅可达到秒精度;因此,无论您将日期时间转换到哪个时区,这部分都不会改变。从
ZoneOffset#ofHoursMinutesSeconds
文档了解更多信息。

如果将此日期时间更改为不同的时区,则日期时间的日、小时、分钟和秒部分将根据目标时区的偏移量而变化。我在以下演示中展示了几个示例:

演示:

class Main {
    public static void main(String args[]) {

        System.out.println(OffsetDateTime
                .parse("2014-01-01T00:00:00.588Z")
                .getOffset()
                .getTotalSeconds());

        // Changing the date-time to different time zones
        ZonedDateTime zdt = ZonedDateTime.parse("2014-01-01T00:00:00.588Z");
        System.out.println(zdt.withZoneSameInstant(ZoneId.of("America/New_York")));
        System.out.println(zdt.withZoneSameInstant(ZoneId.of("Asia/Kolkata")));
    }
}

输出:

0
2013-12-31T19:00:00.588-05:00[America/New_York]
2014-01-01T05:30:00.588+05:30[Asia/Kolkata]

在线演示

Trail:日期时间了解有关现代日期时间 API 的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.