ich habe ein Problem mit einem SimpleDateFormat Objekt, welches ich zum
parsen eines Datums in einem string verwende.
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern("yyyy-mm-dd HH:mm:ss.SSS z");
Wenn das Datum so ankommt:
dDateTime = sdf.parse("2003-07-03 12:04:49.510 CET");
bekomme ich ein Date Objekt zurück, aber wenn eine andere
Zeitzone im string steht wie z. B. hier:
dDateTime = sdf.parse("2003-07-03 12:04:49.510 GMT+4");
oder auch
dDateTime = sdf.parse("2003-07-03 12:04:49.510 Japan");
dann bekomme ich eine ParseException. In der API steht daß GMT
mit + und - Stunden offset benutzt werden kann, trotzdem geht es nicht.
Weiß jemand Rat? Was mache ich falsch?
Danke für jeden Tipp,
Peter
--
xoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxo
Peter Brightman
http://www.brightman.de
xoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxoxo
new SimpleDateFormat("yyyy-mm-dd HH:mm:ss.SSS 'GMT'z")
bzw. mit Deinem Format:
sdf.parse("2003-07-03 12:04:49.510 +4");
> oder auch
> dDateTime = sdf.parse("2003-07-03 12:04:49.510 Japan");
Japan ist kein Zeitformat:
sdf.parse("2003-07-03 12:04:49.510 Tokyo")
Tobias
--
- Programmieren ist wie Romanschreiben. Erst -
- denkt man sich ein paar Typen aus, und dann -
- muß man sehen, wie man mit ihnen zurechtkommt. -
danke für die Tipps, es funktioniert dennoch nicht bei mir! Beide Deiner
Beispiele gehen einfach nicht,
es kommt eine ParserException. Auch Tokyo als Zeitzone bringt einen parser
Fehler. Wer weiß Rat?
Peter
Peter Hellmann schrieb:
>
> danke für die Tipps, es funktioniert dennoch nicht bei mir! Beide Deiner
> Beispiele gehen einfach nicht,
> es kommt eine ParserException. Auch Tokyo als Zeitzone bringt einen
> parser Fehler. Wer weiß Rat?
>
Sorry:
Um "2003-07-03 12:04:49.510 GMT+4" (= s) zu parsen braucht Du folgendes
Format:
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z").parse(s + ":00")
oder new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS 'GMT'Z").parse(s + "00")
;
Denn siehe Doku:
General time zone (das kleine 'z'):
> Time zones are interpreted as text if they have names. For time zones
> representing a GMT offset value, the following syntax is used:
> GMTOffsetTimeZone:
> GMT Sign Hours : Minutes
> Sign: one of
> + -
> Hours:
> Digit
> Digit Digit
> Minutes:
> Digit Digit
> Digit: one of
> 0 1 2 3 4 5 6 7 8 9
> Hours must be between 0 and 23, and Minutes must be between 00 and 59.
> The format is locale independent and digits must be taken from the Basic
> Latin block of the Unicode standard.
RFC 822 time zone (das große 'Z'):
> For formatting, the RFC 822 4-digit time zone format is used:
> RFC822TimeZone:
> Sign TwoDigitHours Minutes
> TwoDigitHours:
> Digit Digit
> TwoDigitHours must be between 00 and 23. Other definitions are as for
> general time zones. For parsing, general time zones are also accepted.
Und für Japan habe ich noch einmal nachgeschaut:
Unter Windows gibt es zwar die TimeZone Tokyo,
unter Java heißt die aber JST (Japan Standard Time), bzw. JDT (Japan
Daylight Time) (ich weiß auch nicht, wieso das nicht automatisch gemappt
wird, unter "jre\lib\tzmappings" gibt es eigentlich ein Mapping dafür).
Also:
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z").parse("2003-07-03
12:04:49.510 JST")
Falls Du eine Liste aller akzeptierten TimeZones brauchst, ich hab hier
eine.
Falls Du trotzdem Japan bzw. Tokyo akzeptieren möchtest müßtest Du Deinen
eigenen Parser davor setzen, der das entsprechend ersetzt.
Tobias Nöbel
p.s. Du hattest übrigens für den Monat kleine 'mm'(= Minute) verwendet.
danke für Deine Tipps.
Peter