2015-11-28 22 views
10

Frankfurt'tan saat 14: 05'te ayrılır ve Los Angeles'a saat 16: 40'da gelir. Uçuş ne kadar sürüyor? İki zaman dilimi arasındaki toplam uçuş süresi?

aşağıda çalıştı:

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

Ama yaklaşık 11hrs ve 30 dakika olan başarılı cevap almak mümkün değilim. Birisi, yukarıdaki problemi çözmemde bana yardımcı olacaktır. Teşekkürler :)

cevap

10

getOffset yanlış yöntemdir. Bu zaman diliminde o bölge için UTC ofsetini alır. Günün gerçek zamanını belirlemede yardımcı olmaz.

toInstant kullanarak her bir değer tarafından temsil edilen Instant öğesinin açıkça almasını sağlamanın bir yolu vardır. Daha sonra geçen süreyi hesaplamak için Duration.between kullanın.

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

Ve son olarak, kısayolları gibi vardır:

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

Alternatif Duration.betweenTemporal nesneler üzerinde işler ve her iki Instant ve ZonedDateTimeTemporal uygulamak beri, sadece ZonedDateTime nesneler üzerinde doğrudan Duration.between arayabilir Bir atao, toplam saniye gibi bir ölçü birimine doğrudan ulaşmak istiyorsanız, bunun iyi olduğunu belirtti. Bunlardan herhangi biri kabul edilebilir.

+0

teşekkür ederim @ Harika bir açıklama için mat ve akılda tutacak gelecekteki hortum şeyleri \ ,,/ –

6

değiştirin:

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

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

ile:

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

DÜZENLEME

Sevdiğim kısa (ve en kısa) Matt Johnson tarafından verilen cevap:

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

Toplam saniye hakkında endişelenmenize gerek yok, getTotalSeconds 'i çağırmaya gerek yok. Bu süreyi senin için yapalım. Örnek için Johnson'ın Diğer Cevapına bakın. –

İlgili konular