如何在太平洋标准时间获得毫秒到午夜
How to get millis to midnigth at PST
我需要获取从现在到 "America/Los_Angeles"(太平洋标准时间)午夜之间的毫秒数。
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
.
您可以使用类型 LocalDate
上的 ZonedDateTime.now(zone)
static factory. Then, you can have the date at midnight (on the next day) in a given timezone with the method atStartOfDay(zone)
获取给定区域中的当前日期。
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);
这将正确地 return 当前日期与洛杉矶第二天开始之间的毫秒数。
您的方法很好,除了 now
瞬间,您将其从您的时区转换为 UTC 时区,给出了您不想要的偏移量。
这应该会如您所愿:
Instant now = Instant.now();
我需要获取从现在到 "America/Los_Angeles"(太平洋标准时间)午夜之间的毫秒数。
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
.
您可以使用类型 LocalDate
上的 ZonedDateTime.now(zone)
static factory. Then, you can have the date at midnight (on the next day) in a given timezone with the method atStartOfDay(zone)
获取给定区域中的当前日期。
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);
这将正确地 return 当前日期与洛杉矶第二天开始之间的毫秒数。
您的方法很好,除了 now
瞬间,您将其从您的时区转换为 UTC 时区,给出了您不想要的偏移量。
这应该会如您所愿:
Instant now = Instant.now();