如何从 Instant 和时间字符串构造 ZonedDateTime?
How to construct ZonedDateTime from an Instant and a time string?
给定一个 Instant
的对象,一个 time string
表示特定 ZoneId
的时间,如何构造一个 ZonedDateTime
带有日期部分(年,月、日)从给定 ZoneId
的瞬间开始,从给定 time string
?
的时间部分开始
例如:
给定一个值为 1437404400000 的 Instant 对象(相当于 20-07-2015 15:00 UTC),一个时间字符串21:00,和一个ZoneId
的对象代表Europe/London,我想构造一个对象ZonedDateTime
相当于 20-07-2015 21:00 Europe/London.
您需要先将时间字符串解析为 LocalTime
,然后您可以使用时区从 Instant
调整 ZonedDateTime
,然后应用时间。例如:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm", Locale.US);
LocalTime time = LocalTime.parse(timeText, formatter);
ZonedDateTime zoned = instant.atZone(zoneId)
.with(time);
创建瞬间并确定该瞬间的 UTC 日期:
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();
解析时间:
LocalTime time = LocalTime.parse("21:00");
根据所需 ZoneId 的 LocalDate 和 LocalTime 创建 ZoneDateTime:
ZonedDateTime zdt = ZonedDateTime.of(date, time, tz);
正如 Jon 所指出的,您需要决定您想要的日期,因为 UTC 中的日期可能与当时给定时区中的日期不同。
给定一个 Instant
的对象,一个 time string
表示特定 ZoneId
的时间,如何构造一个 ZonedDateTime
带有日期部分(年,月、日)从给定 ZoneId
的瞬间开始,从给定 time string
?
例如:
给定一个值为 1437404400000 的 Instant 对象(相当于 20-07-2015 15:00 UTC),一个时间字符串21:00,和一个ZoneId
的对象代表Europe/London,我想构造一个对象ZonedDateTime
相当于 20-07-2015 21:00 Europe/London.
您需要先将时间字符串解析为 LocalTime
,然后您可以使用时区从 Instant
调整 ZonedDateTime
,然后应用时间。例如:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm", Locale.US);
LocalTime time = LocalTime.parse(timeText, formatter);
ZonedDateTime zoned = instant.atZone(zoneId)
.with(time);
创建瞬间并确定该瞬间的 UTC 日期:
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();
解析时间:
LocalTime time = LocalTime.parse("21:00");
根据所需 ZoneId 的 LocalDate 和 LocalTime 创建 ZoneDateTime:
ZonedDateTime zdt = ZonedDateTime.of(date, time, tz);
正如 Jon 所指出的,您需要决定您想要的日期,因为 UTC 中的日期可能与当时给定时区中的日期不同。