Mal wieder Probleme mit Date

mysticado

Aktives Mitglied
Hallo Leute,
also ich möchte von meinem Linux-Server die Zeit des letzten Shutdowns auslesen und diese Zeit dann per Java in Millisekunden umwandeln, um weitere Vergleiche anstellen zu können.
Nun habe ich soweit auch schon alles programmiert - das Datum wird mir in Millis zurückgegeben, doch wenn ich mir die Millis wieder zurücktransferieren möchte bekomme ich immer einen vollkommen anderen Wert. Könnt ihr mal über meinen Code drüberschauen?
Ein Beispiel habt ihr unter der Variable "String linuxDate":

Code:
String linuxDate = "shutdown system down  2.6.32-28-generi Thu Sep 22 14:21 - 14:21  (00:00)";
	    String[] temp = linuxDate.trim().replaceAll("\\s+", " ").split(" ");
	    String str_date=temp[6]+"-"+temp[5]+"-11 "+temp[7]+":00";
               // Bsp: str_date = "22-Sep-11 14:21:00"

	    SimpleDateFormat sdfToDate = new SimpleDateFormat("dd-MMM-yy HH:mm:ss");
	    Date date1 = sdfToDate.parse(str_date);
	    System.out.println("Date in Millis: " +date1.getTime() );

Als Ergebnis aus dem oberen Code erhalte ich folgenden Wert: 1316697693000

Wenn ich diesen Code nun z.B. auf dieser Seite ( Link ) eingebe, erhalte ich als Ergebnis: Thu Sep 22 09:21:33

Wo hakt es denn???
 
da warst du aber sparsam an eigenen Bemühungen, du könntest doch in Java das Date-Objekt ausgeben,
falls du nicht eh schon sicher bist, dass es zumindest für Java das korrekte Datum ist,

außerdem kann man auf der Seite auch ein normales Datum eintippen,
gut dass dann eine abweichende Millisekundenzahl herauskommt passt zum ersten Problem, bringt einen nicht unbedingt weiter,

1316697693000 erhalte ich übrigens nicht, sondern
1316694060000, auf der Webseite dann exakt 8:21, 6 Stunden Abweichung,
und auf der Webseite steht auch die Lösung: 'Thu Sep 22 08:21:00 EDT 2011',
EDT ist Eastern Time Zone - Wikipedia, the free encyclopedia aus Nordamerika, da sind 6 Stunden Abweichung keine Überraschung

------

:00 zu ergänzen nur um Sekunden zu parsen kannst du dir übrigens sparen, falls das Pattern nicht zwingend so lauten muss,
die :33-Sekunden in deinem Beispiel sind angesichts dessen umso rätselhafter
 
Der Timestamp ist genau richtig, nur das Tool formatiert den Timestamp für eine andere Zeitzone. In dem Fall ist das EDT, was der US-Ostküste entspricht.
 
also wenn ich dein Code-Bsp ausführe erhalte ich:

Code:
Date in Millis: 1316694060000
im Gegensatz zu dem was du postest [c]1316697693000[/c]

Daraus kommt auf deiner geposteten Seite dann

1.316.694.060.000 is Thu Sep 22 08:21:00 EDT 2011

Der Rest ergibt sich aus der Differenz der EDT zu unserer Zeit...und nicht die Sommerzeit vergessen!

EDIT:
Meine Güte bin ich langsam... 🙁
 
Hehe Respekt Leute! Das Antworten klappt ja ganz schnell hier im Forum! Thumbs up!

Jetzt scheint aber nichts mehr zu wollen, grrr!
Hier der neue String:
String linuxDate = "shutdown system down 2.6.32-28-generi Thu Sep 22 19:58 - 19:58 (00:00)";

Als Ergebnis bekomme ich nun : 1316717880000

Das passt jetzt irgendwie aber gar nicht mehr?!?!?!

Mensch ich bin an diesem Sch*** schon langsam am verzweifeln. Also, um es kurz zu erklären...ich muss ein Skript erstellen welches schaut welcher von meinen 3 Rechnern als letzter runtergefahren wurde, d.h. ich muss die Zeiten vergleichen (also: if Zeit1 < Zeit2) und deswegen brauche ich die Millisekunden.
Das Problem, das ich bei meinem Code habe ist, ich habe Angst, dass die Zeit nicht irgendwie falsch aus dem Datum berechnet wird. Any help? 🙂
 
1316717880000 ist 20:28, eine Stunde Abweichung, woher weißt du eigentlich dass das nicht der richtige Wert ist?

was liefert
System.out.println(sdfToDate.getTimeZone());
?
 
Naja ich war der Annahme, dass der Wert falsch ist, weil mir die oben genannt Webseite nun das lieferte: 1.316.717.880.000 is Thu Sep 22 14:58:00 EDT 2011, obwohl es ja eigentlich 20:28 sein müsste (natürlich mit den paar Stunden Zeitunterschied).

Folgendes liefert der TimeZone-Befehl:

sun.util.calendar.ZoneInfo[id="Europe/Berlin",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Europe/Berlin,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]

Passt doch eigtl, oder?
 
in der Tat für mich bisher nicht zu verstehen,
noch mal mit separaten abgeschlossenen Programm versuchen:
Java:
public class Test {
	public static void main(String[] args) throws Exception {
		System.out.println("start");
		String str_date = "22-Sep-11 19:58:00";
		System.out.println(str_date);
		SimpleDateFormat sdfToDate = new SimpleDateFormat("dd-MMM-yy HH:mm:ss");
		sdfToDate.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
		Date date1 = sdfToDate.parse(str_date);
		System.out.println("Date in Millis: " + date1.getTime());
		System.out.println("Date: " + date1);
	}
}
liefert bei dir nicht folgende Ausgabe?:
Code:
start
22-Sep-11 19:58:00
Date in Millis: 1316714280000
Date: Thu Sep 22 19:58:00 CEST 2011
 
Tja, es hat wohl nicht anders gewollt, als dass es doch jemand für mich fertigstellt, bzw. debuggt!
Vielen Dank für die Hilfe! So klappt's nun 🙂
 

Zurück
Oben