我有一个以字符串格式存储在数据库中的日期ddMMyyyy和hh:mm以及TimeZone。 我想根据这些信息创建一个Instant,但我不知道该怎么做。
类似
LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
Instant instant = dateTime.toInstant(TimeZone.getTimeZone("ECT"));
答案 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"用你需要的时区。