2015-11-28 12 views
10

フランクフルトを14時05分に出発し、16時40分にロサンゼルスに到着した場合。飛行時間はどれぐらいですか?2つのタイムゾーン間の合計飛行時間?

私は以下試してみました:

ZoneId frank = ZoneId.of("Europe/Berlin"); 
ZoneId los = ZoneId.of("America/Los_Angeles"); 

LocalDateTime dateTime = LocalDateTime.of(2015, 02, 20, 14, 05); 
LocalDateTime dateTime2 = LocalDateTime.of(2015, 02, 20, 16, 40); 

ZonedDateTime berlinDateTime = ZonedDateTime.of(dateTime, frank); 
ZonedDateTime losDateTime2 = ZonedDateTime.of(dateTime2, los); 

int offsetInSeconds = berlinDateTime.getOffset().getTotalSeconds(); 
int offsetInSeconds2 = losDateTime2.getOffset().getTotalSeconds(); 

Duration duration = Duration.ofSeconds(offsetInSeconds - offsetInSeconds2); 
System.out.println(duration); 

しかし、私は11hrsと約30分で成功した答えを得ることができないのです。上記の問題を解明するのに手伝ってくれる人もいますか?ありがとうございました:)

答えて

10

getOffsetは間違った方法です。その時点でそのゾーンのUTCオフセットが取得されます。それは実際の時刻を決定するのに役立たない。

toInstantを使用して、各値で表されるInstantを明示的に取得する方法もあります。次に、Duration.betweenを使用して経過時間を計算します。

Duration duration = Duration.between(berlinDateTime, losDateTime2); 

をそして最後に、ショートカットは次のようにあります

Instant departingInstant = berlinDateTime.toInstant(); 
Instant arrivingInstant = losDateTime2.toInstant(); 
Duration duration = Duration.between(departingInstant, arrivingInstant); 

また、Duration.betweenTemporalオブジェクト上の作品、そして両方InstantZonedDateTimeTemporalを実装するので、あなただけのZonedDateTimeオブジェクトに直接Duration.betweenを呼び出すことができます1秒間などの計測単位で直接取得したい場合は、1つのataoが問題ありません。これらのいずれも許容可能です。

+0

ありがとう@大きな説明のためのマットと心に留めておく将来のホースの事柄\ ,,/ –

6

置き換えます

int offsetInSeconds = berlinDateTime.getOffset().getTotalSeconds(); 
int offsetInSeconds2 = losDateTime2.getOffset().getTotalSeconds(); 

Duration duration = Duration.ofSeconds(offsetInSeconds - offsetInSeconds2); 

で:

long seconds = ChronoUnit.SECONDS.between(berlinDateTime, losDateTime2); 
Duration duration = Duration.ofSeconds(seconds); 

EDIT

は私が好き短く(最短)マット・ジョンソンによって与えられた答え:

Duration duration = Duration.between(berlinDateTime, losDateTime2); 
+0

あなたは合計秒を心配する必要はなく、 'getTotalSeconds'を呼び出す必要はありません。 'Duration'をあなたのために働かせてください。例については、Johnsonによる他の回答を参照してください。 –

関連する問題