Java 8 – 使用 TimeZone 从 LocalDateTime 创建 Instant
Java 8 – Create Instant from LocalDateTime with TimeZone
我有一个日期以字符串格式 ddMMyyyy 和 hh:mm 以及时区存储在数据库中。
我想根据该信息创建一个 Instant,但我不知道该怎么做。
类似
LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
Instant instant = dateTime.toInstant(TimeZone.getTimeZone("ECT"));
您可以先用那个时区创建一个 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 的建议),因为它不那么模糊。
忘记旧时区 class。使用 ZoneId
,因为它是正确的线程安全的,您可以只使用最终静态字段来存储区域。
LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
ZonedDateTime.of(dateTime, ZoneId.of("ECT")).toInstant();
我认为以下代码应该有效:
LocalDateTime time = LocalDateTime.of(2017, Month.JUNE, 15, 13, 39);
ZonedDateTime.of(time, TimeZone.getTimeZone("ZONE").toZoneId()).toInstant();
您只需将 "ZONE" 替换为您需要的时区即可。
我有一个日期以字符串格式 ddMMyyyy 和 hh:mm 以及时区存储在数据库中。 我想根据该信息创建一个 Instant,但我不知道该怎么做。
类似
LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
Instant instant = dateTime.toInstant(TimeZone.getTimeZone("ECT"));
您可以先用那个时区创建一个 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 的建议),因为它不那么模糊。
忘记旧时区 class。使用 ZoneId
,因为它是正确的线程安全的,您可以只使用最终静态字段来存储区域。
LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
ZonedDateTime.of(dateTime, ZoneId.of("ECT")).toInstant();
我认为以下代码应该有效:
LocalDateTime time = LocalDateTime.of(2017, Month.JUNE, 15, 13, 39);
ZonedDateTime.of(time, TimeZone.getTimeZone("ZONE").toZoneId()).toInstant();
您只需将 "ZONE" 替换为您需要的时区即可。