Java 8 - 使用TimeZone从LocalDateTime创建Instant

时间:2017-06-15 13:45:56

标签: java date java-8 localdate

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

类似

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

3 个答案:

答案 0 :(得分:31)

您可以先使用该时区创建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的建议),因为它不那么含糊。

答案 1 :(得分:4)

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

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

答案 2 :(得分:-3)

我认为以下代码应该有效:

LocalDateTime time = LocalDateTime.of(2017, Month.JUNE, 15, 13, 39);
ZonedDateTime.of(time, TimeZone.getTimeZone("ZONE").toZoneId()).toInstant();

你只需要更换" ZONE"用你需要的时区。