ZonedDateTime zdt =
ZonedDateTime.of(
2015, 1, 25, 23, 35, 7, 684000000,
ZoneId.of("Europe/London"));
System.out.println(zdt); // 2015-01-25T23:35:07.684Z[Europe/London]
System.out.println(zdt.getZone().getId()); // Europe/London
System.out.println(zdt.toInstant().toEpochMilli()); // 1422228907684
DateTimeZone london = DateTimeZone.forID(zdt.getZone().getId());
DateTime dt = new DateTime(zdt.toInstant().toEpochMilli(), london);
System.out.println(dt); // 2015-01-25T23:35:07.684Z
如果区域 ID 转换可能因任何不受支持的或无法识别的 ID 而崩溃,我建议
- 捕获并记录它,
- 做 tz 存储库的更新(对于 Joda:更新到最新版本,对于 JDK:使用 tz-updater-tool)
这通常是比默默地回退到任何任意tz偏移(如UTC)更好的策略。