Java 8 – 使用 TimeZone 从 LocalDateTime 创建 Instant

新手上路,请多包涵

我有一个日期以字符串格式 ddMMyyyy 和 hh:mm 以及时区存储在数据库中。我想根据该信息创建一个 Instant,但我不知道该怎么做。

就像是

LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
Instant instant = dateTime.toInstant(TimeZone.getTimeZone("ECT"));

原文由 La Carbonell 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 610
2 个回答

您可以先使用该时区创建一个 ZonedDateTime ,然后调用 toInstant

 LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 15, 13, 39);
Instant instant = dateTime.atZone(ZoneId.of("Europe/Paris")).toInstant();
System.out.println(instant); // 2017-06-15T11:39:00Z

我还切换到使用完整时区名称(根据 Basil 的建议),因为它不那么模糊。

原文由 Jorn Vernee 发布,翻译遵循 CC BY-SA 3.0 许可协议

忘记旧的 TimeZone 类。使用 ZoneId ,因为它是正确的线程安全的,您可以只使用最终静态字段来存储区域。

 LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
ZonedDateTime.of(dateTime, ZoneId.of("ECT")).toInstant();

原文由 coladict 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题