我正在使用 java 从数据库中获取日期(日期应该始终是
2014-01-01T00:00:00
)。 我得到的返回时间如下:2014-01-01T00:00:00.588Z
。
我的问题是,最后的“
588Z
”是什么?如果检索是在不同的时区完成的,这个数字会有所不同吗?即数字 588 在不同时区会是不同的数字吗?
感谢您给我提供的任何帮助。
Z 代表 UTC(即 GMT,但标准):http://en.wikipedia.org/wiki/Cooperative_Universal_Time
Z 是 UTC 时区的简写。
我的问题是,最后的“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 的更多信息。