给定Instant
的对象,time string
代表特定ZoneId
的时间,如何构建带有日期部分的ZonedDateTime
对象(年,月, (一天)从给定ZoneId
的时刻和给定time string
的时间部分?
例如:
如果Instant的值为 1437404400000 (相当于 20-07-2015 15:00 UTC ),则时间字符串 21:00 ,以及ZoneId
代表欧洲/伦敦的对象,我想构建一个ZonedDateTime
对象,相当于 20-07-2015 21:00欧洲/伦敦
答案 0 :(得分:8)
创建即时消息并确定该瞬间的UTC日期:
$str = $doc->saveHTML($elements->item(0));
解析时间:
Instant instant = Instant.ofEpochMilli(1437404400000L);
LocalDate date = instant.atZone(ZoneOffset.UTC).toLocalDate();
// or if you want the date in the time zone at that instant:
ZoneId tz = ZoneId.of("Europe/London");
LocalDate date = instant.atZone(tz).toLocalDate();
从LocalDate和LocalTime在所需的ZoneId:
创建一个ZoneDateTimeLocalTime time = LocalTime.parse("21:00");
正如Jon指出的那样,你需要决定你想要的日期,因为UTC中的日期可能与当时给定时区的日期不同。
答案 1 :(得分:7)
您首先需要将时间字符串解析为LocalTime
,然后您可以使用区域从ZonedDateTime
调整Instant
,然后应用时间。例如:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm", Locale.US");
LocalTime time = LocalTime.parse(timeText, formatter);
ZonedDateTime zoned = instant.atZone(zoneId)
.with(time);