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.

War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top