对 Instant、ZonedDateTime 和 UTC 感到困惑
Confused about Instant, ZonedDateTime and UTC
我试图从 Java 8.
中理解 UTC 和新的 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
小时?
2016-06-10T19:19:18Z
是在六月(当柏林在夏令时时:Central European Summer Time)。
2016-12-10T23:23:24.000000245Z
是在 12 月(当柏林不在夏令时时:Central European Time)。
因此 UTC 偏移量不同。
我试图从 Java 8.
中理解 UTC 和新的 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
小时?
2016-06-10T19:19:18Z
是在六月(当柏林在夏令时时:Central European Summer Time)。
2016-12-10T23:23:24.000000245Z
是在 12 月(当柏林不在夏令时时:Central European Time)。
因此 UTC 偏移量不同。