2016-08-31 54 views
1

我需要在「America/Los_Angeles」(PST)處獲得從現在到午夜的毫秒數。如何在PST處獲得毫秒到midnigth

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); 
+0

問題是什麼? –

回答

1

由於您希望在特定區域時,不要使用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); 

這將正確返回當前日期和洛杉磯第二天開始之間的毫秒數。

+0

謝謝!它看起來更清楚:) – HoTicE

0

你的方法很好,除了now瞬間,你從你的時區轉換爲UTC時區,給你一個你不想要的偏移量。

像您期望這應該工作:

Instant now = Instant.now();