对Instant,ZonedDateTime和UTC感到困惑

时间:2016-06-10 20:14:31

标签: java utc java-time zoneddatetime java.time.instant

我试图理解UTC的概念和Java 8中的新TimeApi。

Instant from = Instant.from(ZonedDateTime.of(2016, 12, 11, 00, 23, 24, 245, ZoneId.systemDefault()));
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date date = simpleDateFormat.parse("2016-06-10 21:19:18");

System.out.println("Case1:");
System.out.println(date.toInstant());
System.out.println(ZonedDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()));

System.out.println("Case2:");
System.out.println(from);
System.out.println(ZonedDateTime.ofInstant(from, ZoneId.systemDefault()));

打印以下输出:

Case1:
2016-06-10T19:19:18Z
2016-06-10T21:19:18+02:00[Europe/Berlin]

Case2:
2016-12-10T23:23:24.000000245Z
2016-12-11T00:23:24.000000245+01:00[Europe/Berlin]

为什么Case1中的区域偏移为+02:00小时,Case2 +01:00小时?

1 个答案:

答案 0 :(得分:3)

2016-06-10T19:19:18Z是六月(当柏林在夏令时:Central European Summer Time)。

2016-12-10T23:23:24.000000245Z是12月(当时柏林不在夏令时:Central European Time)。

因此UTC偏移量不同。