java

2015-09-07 37 views
8

yılında SimpleDateFormat gelen iki eşit tarihleri ​​Al benim problem göstermek için bu pasajı yaptı:java

import java.text.SimpleDateFormat; 

public class Foo { 
    public static void main(String[] args) { 

     SimpleDateFormat formatter = new SimpleDateFormat("mm hh dd MM yyyy"); 
     String date1 = "1412293500"; 
     String date2 = "1412336700"; 
     String dateString1 = formatter.format(Long.parseLong(date1 + "000")); 
     String dateString2 = formatter.format(Long.parseLong(date2 + "000")); 
     System.out.println(dateString1 + " " + dateString2); 

    } 
} 

date1 ve date2 saniye cinsinden ifade edilir, bu yüzden çıkış içinde iki farklı tarihleri ​​bekliyorum ama tarihlerin aynı basılmış. Bu online tool'u kontrol ettim ve tarihlerin iki farklı güne ait olduğunu görebiliyorsunuz.

Bunu nasıl çözebilirim?

+0

Birincisi, posta koduna. – hd1

+0

İlk olarak, kodunuz yanlıştır, çünkü var beyanında dat2 yazdınız. Her neyse bu benim jwm çıkışlarımı yazdırır1: 45 01 03 10 2014 date2: 45 01 03 10 2014 muhtemelen belli bir değerde yuvarlanıyor –

cevap

8

İki zaman damgasının arasındaki fark tam 12 saattir.

SimpleDateFormat'daki h tanımlayıcısı, AM/PM (1-12) saatlerini biçimlendirir, böylece gerçek farkı çıkarmazsınız: tarih, AM'den PM'ye kaydırılır.

k veya H tanımlayıcısını kullanarak gün içinde saati (1-24) veya (0-23) olarak biçimlendirin.

SimpleDateFormat formatter = new SimpleDateFormat("mm kk dd MM yyyy"); 
String date1 = "1412293500"; 
String date2 = "1412336700"; 
String dateString1 = formatter.format(Long.parseLong(date1 + "000")); 
String dateString2 = formatter.format(Long.parseLong(date2 + "000")); 
System.out.println(dateString1 + " " + dateString2); // prints 45 01 03 10 2014 45 13 03 10 2014 

Yapabilirsin de çıktı böyle a tanımlayıcı ile AM ​​/ PM işaretleyici: derler

SimpleDateFormat formatter = new SimpleDateFormat("mm hh dd MM yyyy aa"); 
String date1 = "1412293500"; 
String date2 = "1412336700"; 
String dateString1 = formatter.format(Long.parseLong(date1 + "000")); 
String dateString2 = formatter.format(Long.parseLong(date2 + "000")); 
System.out.println(dateString1 + " " + dateString2); // prints 45 01 03 10 2014 AM 45 01 03 10 2014 PM 
+1

'k' biraz ezoterik. Bu genellikle "H" ile yapılır. – RealSkeptic

+0

(kk) biçimi için (1-24) bu çalışmıyor. – OiRc

4

Bunun nedeni, tarihleriniz 12 saat appart olduğundan ve saat formatı için 'h' küçük harfini kullanmanızdır. Tarihler sırasıyla 1 ve 1 pm'dir. Çıktınızda bunu görebilmek için 'H' harfini kullanın ya da 'am/pm' işaretleyicisinin formatına 'a' ekleyin.