我需要获取从现在到午夜之间“ 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/