Konvertieren einer Zeichenfolge in GregorianCalendar
Frage
Ich habe eine Zeichenfolge aus einem E-Mail-Header, wie Date: Mon, 27 Oct 2008 08:33:29 -0700
. Was ich brauche, ist eine Instanz GregorianCalendar, welche den gleichen Moment darstellen. So einfach ist das - wie kann ich es tun
Und für die schnellsten sind - das ist nicht gehen richtig funktioniert:
SimpleDateFormat format = ... // whatever you want
Date date = format.parse(myString)
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date)
, weil es die Zeitzone zu UTC (oder die lokalen Computer Zeit, abhängig von Java-Version) normalisieren. Was ich brauche, ist calendar.getTimeZone (). GetRawOffset () zurückzukehren -7 * milisInAnHour
.
Lösung
Ich würde empfehlen, die Joda Zeit Bibliothek Blick in, wenn das eine Option ist. Ich bin normalerweise gegen eine Drittanbieter-Bibliothek verwenden, wenn die Core-Plattform eines ähnliche Funktionalität bietet, aber ich machte dies eine Ausnahme, weil der Autor von Joda Zeit auch hinter JSR310 ist, und Joda Zeit ist im Grunde rollte in Java 7 schließlich gehen werden.
http://joda-time.sourceforge.net/
Wie auch immer, wenn Joda Zeit ist eine Option, so etwas wie die sollte Arbeit:
DateTimeFormatter formatter =
DateTimeFormat.forPattern("your pattern").withOffsetParsed();
DateTime dateTime = formatter.parseDateTime("your input");
GregorianCalendar cal = dateTime.toGregorianCalendar();
Ich hoffe, das hilft.
Andere Tipps
Und für die schnellsten ist - das ist nicht richtig zur Arbeit gehen ... weil es die Zeitzone UTC (oder die lokalen Computer Zeit, abhängig von Java-Version) normalisieren. Was ich brauche, ist calendar.getTimeZone (). GetRawOffset () zurückzukehren -7 * milisInAnHour.
Nun technisch funktioniert das, weil, während es wird ein Objekt mit Time-Zone gleich die aktuellen System Time-Zone zurückkehrt, wird die Zeit für das Offset-Konto geändert werden.
Mit diesem Code:
String dateString = "Mon, 27 Oct 2008 08:33:29 -0700";
DateFormat df = new SimpleDateFormat("E, dd MMM yyyy hh:mm:ss Z");
Date parsed = df.parse(dateString);
System.out.println("parsed date: " + parsed);
Calendar newCalendar = Calendar.getInstance();
newCalendar.setTime(parsed);
Ausgänge:
analysiert: Mo 27. Oktober 11.33.29 EDT 2008
, die technisch korrekt ist, da mein System Zeitzone EDT / UTC minus 4 Stunden (die drei Stunden vor Ihnen ist). Wenn Sie die Zeit, wenn die Anzahl der Millisekunden seit dem 1. Januar auszudrücken, 1970, 00:00:00 GMT (das ist, wie das Date
Objekt speichert es ist Datum / Uhrzeit), dann wird dieses Datum / Zeiten gleich sind, es ist nur die Time-Zone, die anders ist .
Ihr Problem ist wirklich Wie kann ich ein Datum / Kalender in meine Zeitzone konvertieren Dazu nehmen Sie einen Blick auf meine Antwort auf die vorherige Frage Wie Kalender Timezones mit Java zu handhaben?