Konvertieren einer Zeichenfolge in GregorianCalendar

Ich habe eine Zeichenfolge aus einem E-Mail-Header, wie Date: Mon, 27 Oct 2008 08:33:29 -0700. What I need is an instance of GregorianCalendar, that will represent the same moment. As easy as that -- how do I do it? . Was ich brauche, ist eine Instanz von GregorianCalendar, die den gleichen Moment darstellen wird. So einfach das ist -- wie mache ich das?

Und für die Schnellsten -- das ist nicht wird richtig funktionieren:

SimpleDateFormat format = ... // whatever you want
Date date = format.parse(myString)
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date)

, weil es die Zeitzone zu UTC normalisieren wird (oder Ihre lokale Maschinenzeit, abhängig von Der Java-Version). Was ich brauche, ist calendar.getTimeZone().getRawOffset() um -7 * milisInAnHour. zurückzugeben.

Antwort auf "Konvertieren einer Zeichenfolge in GregorianCalendar " 2 von antworten

Ich würde empfehlen, in die Joda Time Bibliothek zu schauen, wenn das eine Option ist. Ich bin normalerweise gegen die Verwendung einer Drittanbieter-Bibliothek, wenn die Kernplattform ähnliche Funktionen bietet, aber ich habe dies zu einer Ausnahme gemacht, weil der Autor von Joda Time auch hinter JSR310 steht und Joda Time im Grunde irgendwann in Java 7 gerollt wird.

http://joda-time.sourceforge.net/

Wenn Joda Time eine Option ist, sollte so etwas wie dieses funktionieren:

DateTimeFormatter formatter =
    DateTimeFormat.forPattern("your pattern").withOffsetParsed();
DateTime dateTime = formatter.parseDateTime("your input");
GregorianCalendar cal = dateTime.toGregorianCalendar();

Ich hoffe, das hilft.

weil es die Zeitzone zu UTC normalisiert (oder Ihre lokale Maschinenzeit, abhängig von der Java-Version). Was ich brauche, ist calendar.getTimeZone().getRawOffset() um -7 * milisInAnHour zurückzugeben.

Technisch funktioniert das, denn während es ein Objekt mit TimeZone zurückgibt, das dem aktuellen System TimeZone entspricht, wird die Zeit geändert, um den Offset zu berücksichtigen.

Dieser 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);

gibt aus:

analysiertes Datum: Mon Oct 27 11:33:29 EDT 2008

, was technisch korrekt ist, da meine Systemzeitzone EDT / UTC minus vier Stunden ist (das ist drei Stunden vor Ihnen). Wenn Sie die Zeit als Anzahl von Millisekunden seit dem 1. Januar 1970, 00:00:00 GMT (so speichert das Date object stores it's date/time), then these date/times are equal, it's just the TimeZone that is different. Objekt sein Datum/Uhrzeit) ausdrücken, dann sind diese Datums-/Uhrzeitzeiten gleich, es ist nur die TimeZone, die sich unterscheidet.

Ihr Problem ist wirklich Wie konvertiere ich ein Datum/Kalender in meine Zeitzone? Werfen Sie dazu einen Blick auf meine Antwort auf die vorherige Frage How to handle calendar TimeZones using Java?

Und für die Schnellsten -- das wird nicht richtig funktionieren ...