我需要获取从现在到午夜之间“ America / Los_Angeles”(PST)的毫秒数。

midnightAtPST = ???;

long millis = ChronoUnit.MILLIS.between(now, midnightAtPST) ???


这是我现在拥有的,它给出了不正确的值:

LocalDateTime midnight = LocalDateTime.now().toLocalDate().atStartOfDay().plusDays(1);
Instant midnigthPST = midnight.atZone(ZoneId.of("America/Los_Angeles")).toInstant();
Instant now = LocalDateTime.now().toInstant(ZoneOffset.UTC);

long millis = ChronoUnit.MILLIS.between(now, midnigthPST);

最佳答案

由于您对特定区域中的时间感兴趣,因此请勿使用没有时区概念的LocalDateTime,而应使用ZonedDateTime

您可以使用ZonedDateTime.now(zone)静态工厂获取给定区域中的当前日期。然后,可以使用类型atStartOfDay(zone)上的方法LocalDate将日期设置为给定时区的午夜(第二天)。

ZoneId zoneId = ZoneId.of("America/Los_Angeles");
ZonedDateTime now = ZonedDateTime.now(zoneId);
ZonedDateTime midnight = LocalDate.now().atStartOfDay(zoneId).plusDays(1);

long millis = ChronoUnit.MILLIS.between(now, midnight);


这将正确返回当前日期与洛杉矶第二天开始之间的毫秒数。

关于java - 如何在PST将Millis带到午夜,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39248102/

10-11 21:33