2015-09-07 12 views
8

habe ich diese Schnipsel mein Problem zu zeigen:Abrufen von zwei gleich stammt aus dem Simple in 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 und date2 werden in Sekunden ausgedrückt, so erwarte ich zwei verschiedene Tage ausgegeben, aber die Daten sind Das gleiche gedruckt. Ich habe in diesem online tool überprüft, und wie Sie sehen können, sind die Daten mit zwei verschiedenen Tagen verbunden.

Wie kann ich das lösen?

+0

Zuerst Post-Code, der kompiliert wird. – hd1

+0

Zuerst ist Ihr Code falsch, weil Sie dat2 in die var-Deklaration geschrieben haben. Wie auch immer, es ist wahr, dass mein jwm druckt date1: 45 01 03 10 2014 date2: 45 01 03 10 2014 wahrscheinlich rundet es bei einem bestimmten Wert –

Antwort

8

Der Unterschied zwischen Ihren beiden Zeitstempeln beträgt genau 12 Stunden.

Die h Kennung in SimpleDateFormat formatiert die Stunden in AM/PM (1-12), so dass Sie tatsächlich nicht den tatsächlichen Unterschied ausgeben: Das Datum wurde von AM zu PM verschoben.

Versuchen Sie mit der k oder H Kennung, die die Stunde in Tag als (1-24) oder (0-23) formatiert.

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 

Sie könnten auch der AM/PM-Marker mit der a Kennung wie diese Ausgabe:

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' ist ein wenig esoterisch. Dies wird normalerweise mit "H" gemacht. – RealSkeptic

+0

Für das Format (kk) (1-24) funktioniert das nicht. – OiRc

4

Dies ist, weil Ihre Daten 12h appart sind und Sie den Kleinbuchstaben 'h' für die Stundenformatierung verwenden. Die Daten sind 1 Uhr morgens und 1 Uhr nachmittags. Um dies in Ihrer Ausgabe zu sehen, verwenden Sie "H" in Großbuchstaben oder fügen Sie "a" zum Format für die Markierung "am/pm" hinzu.