2013-06-18 17 views
25

Burada sorulana çok benzeyen bir şeyle uğraşıyorum - compare Joda-Time time zones ama benim için çalışmıyor gibi görünüyor. Ben yukarıda hem sysout açıklamalardan 'yanlış' get İlginçtir kiİki Joda-Time DateTime nesnesinin karşılaştırılması

DateTime estDT = new DateTime(DateTimeZone.forID("America/Puerto_Rico")).withMillisOfSecond(0); 
DateTime londonDT = new DateTime(DateTimeZone.forID("Europe/London")).withMillisOfSecond(0); 

    System.out.println("Comparison " + londonDT.isBefore(estDT)); 
    System.out.println("Comparison " + londonDT.isAfter(estDT)); 

-

İşte ben Joda-TimeDateTime test ediyorum kod parçası. Herkes bu karşılaştırmayı yapmanın doğru yolu ne olacağını açıklayabilir mi?

cevap

14

Büyük olasılıkla aynı anı, ancak farklı saat dilimlerinde temsil eden iki DateTime örneği oluşturuyorsunuz. Hiçbiri diğerinden önce ya da sonra değil.

Saat dilimi, tarih/saat yöntemlerinin getHourOfDay() zamanını anında nasıl dönüştürdüğünü etkiler.

+1

eşittir. İki ayrı kod satırı, bilgisayarın saatinin iki ayrı örneklemini ifade eder, bu nedenle 2. satır, 1'den daha geç gerçekleşir. DateTime bir milisaniye çözünürlüğüne sahiptir, bu nedenle her iki kod satırı da bilgisayarın saatinin aynı milisaniyesinde yürütüldüğünde, bunlar birbirine eşit olurlar. Bu saf şanstır (şans). Java iş parçacığının yürütülmesi sırasında gecikmesi/askıya alınmasına bağlı olarak veya daha yavaş bir bilgisayarda çalıştırıldığında, bu iki DateTime farklı olabilir. –

+0

İkimiz de çok güçlüydük. İki olasılıkla * muhtemelen * aynı anda, anlıkMillisOfSecond (0) ile yapılan çağrıları gösterir. Bununla birlikte, farklı saniyeler içinde gerçekleştikleri takdirde (örneğin, millis = 999 ve millis = 0), farklılık gösterebilirler. Zaman içinde aynı anda isteniyorsa, withZone() yöntemi, anında iki kez almaktan daha güvenilir olacaktır. Bununla birlikte, OP'nin giriş olarak sağlanan iki farklı zaman dilimi içinde olması daha olasıdır. –

44

isAfter ve isBefore ve yöntemleri, öğelerini millis'e göre (zaman dilimini göz ardı ederek) karşılaştırır.

Örneğinizde, tarihlerin eşit değirmenleri vardır.

System.out.println(londonDT.getMillis() == estDT.getMillis()); 

true yazdırılır.

İfadeler

londonDT.isBefore(estDT) 
londonDT.isAfter(estDT) 

londonDT Evrenin zaman çizgisi üzerindeki noktalar gibi bir an * sonra * estDT temsil eder, teknik

londonDT.getMillis() < estDT.getMillis() 
londonDT.getMillis() > estDT.getMillis() 
İlgili konular