2016-08-31 5 views
1

"America/Los_Angeles"(PST)で、今夜から深夜までのミリ秒数を取得する必要があります。PSTでmillisをmidnigthにする方法

midnightAtPST = ???; 

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

これは間違った値与える、私は今のところ持っているものである:ないLocalDateTimeを、使用しないでください、あなたは特定のゾーン内の時間のために興味を持っているので

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

をタイムゾーンという概念はありますが、ZonedDateTimeを使用してください。

スタティックファクトリZonedDateTime.now(zone)を使用すると、特定のゾーンで現在の日付を取得できます。次に、ある特定のタイムゾーンで午前0時(翌日)に日付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(); 
関連する問題