我在Java中使用ZonedDateTime变量。
我希望将变量的值(默认UTC时区)转换为“America/New York”的时区,使日期保持不变。
例如:4:00 am UTC = 12:00 am EST。通过添加或减去小时数来更改ZonedDateTime变量,以使日期保持不变。
我们如何实现这种转换呢?
我在Java中使用ZonedDateTime变量。
我希望将变量的值(默认UTC时区)转换为“America/New York”的时区,使日期保持不变。
例如:4:00 am UTC = 12:00 am EST。通过添加或减去小时数来更改ZonedDateTime变量,以使日期保持不变。
我们如何实现这种转换呢?
您可以通过将时间转换为LocalDateTime,然后再转换回指定时区的ZonedDateTime来完成:
ZonedDateTime zoned = ZonedDateTime.now();
LocalDateTime local = zoned.toLocalDateTime();
ZonedDateTime newZoned = ZonedDateTime.of(local, ZoneId.of("America/New_York"));
如果你想将UTC日期和EST时间结合起来,可以按照以下方式进行:
ZonedDateTime utc = ...
ZonedDateTime est = utc.withZoneSameInstant(ZoneId.of("America/New_York"));
ZonedDateTime estInSameDay = ZonedDateTime.of(utc.toLocalDate(), est.toLocalTime(), ZoneId.of("America/New_York"));
Instant
类。使用Instant
对象,您可以轻松地转换为指定时区的ZonedDateTime
:Instant instant = Instant.parse("2018-10-02T04:00:00.0Z");
ZonedDateTime nyTime = instant.atZone(ZoneId.of("America/New_York"));
//2018-10-02 00:00:00
保持您的日期不变,我认为这可能有效
ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC);
ZonedDateTime est = utc.plusHours(5); //normally est is 5 hours ahead