SimpleDateFormat und Zeitzone

quaylar

Mitglied
Hi alle,

Ich hab ein Verständnisproblem, was die Java Datentypen Date, TimeZone und SimpleDateFormat angeht.
Vielleicht kann mir hier jemand auf die Sprünge helfen:

Die Javadoc für Date gibt an, ein Date würde die Zeit immer in UTC repräsentieren, um in eine andere Zeitzone zu konvertieren kann ich einfach ein SimpleDateFormat nehmen, die Ziel-Zeitzone setzen und dann mit format() ausgeben.
Das funktioniert auch prima, nur wie realisiere ich das hier:

Ich hab in meiner Datenbank Timestamps in UTC stehen, diese lese ich über Hibernate aus und erhalte java.util.Date Objekte.
Ich möchte nun diese Daten in verschiedenen Zeitzonen ausgeben.
Sollte ja einfach gehen: Ein SimpleDateFormat mit der Ziel-Zeitzone (mal mit CET getestet, also UTC+1) erstellen und dann formatieren.
Tatsache ist aber, dass ich hier nicht einen Zeitstempel mit +1h zurückbekomme, sondern den ursprünglichen. Teste ich mit PST (UTC-8), erhalte ich einen Zeitstempel der 9h zurückliegt.

Ganz offensichtlich interpretiert SimpleDateFormat, das übergebene Datum als CET und nicht als UTC, also ist im Date doch irgendwie eine Zeitzone hinterlegt?

Kann irgendjemand Licht in die Sache bringen? Ich möchte, dass meine Zeitstempel als UTC interpretiert werden und davon ausgehend in andere Zeitzonen konvertiert werden...

lg,

--qu
 
S

SlaterB

Gast
ein Date entspricht immer einen long-Wert Millisekunden seit 1970,
finde den für ein problematisches Test-Datum heraus, wirf allen DB-Code weg,
erstelle ein neues Test-Programm, erstelle dort das Datum aus dem Milli-Wert und programmiere an Ausgaben was immer du da für ein Problem hast,
-> und poste das hier, dann kann man anfangen nachzudenken



---

kann es vielleicht etwas mit Sommer/ Winterzeit zu tun haben?
dadurch gibt es in bestimmen Jahresabschnitten eine Stunde mehr oder weniger als in anderen,
die Zeitzonen rücken mal näher zusammen, mal weiter auseinander
 

quaylar

Mitglied
Servus,

Vergiss den ganzen DB-Kram. Die zugrundeliegende Frage ist:

Ich hab Timestamps in UTC. Wie konvertier ich die in eine eine andere Zeitzone.

Simples Beispiel:

Java:
Date myDate = new Date();
SimpleDateFormat df = new SimpleDateFormat();
df.setTimeZone(TimeZone.getTimeZone("PST"));
df.format(myDate);

Erzeugt aktuelles Datum (sollte intern also in UTC gespeichert sein) und wandelt es dann in PST um (UTC-8, nachdem ich hier in Zeitzone UTC+1 bin, subtrahiert er 9h).

Soweit so gut. In meinem aktuellen Fall, will ich aber nicht, dass er myDate als UTC+1 interpretiert, sondern als UTC. Gibts dafür irgendeinen Weg?
 
S

SlaterB

Gast
> Erzeugt aktuelles Datum (sollte intern also in UTC gespeichert sein)

erzeugt ein Datum mit der jetztigen Zeit, so spät es eben gerade ist, das ist zeitzonenunabhängig, Date kennt keine Zeitzone,
es ist jetzt gerade 289123689blahblah Millisekunden nach einem bestimmten Startzeitpunkt und das war 1.1.1970 00:00 in London oder genausogut 2:00 in Berlin

> und wandelt es dann in PST um (UTC-8, nachdem ich hier in Zeitzone UTC+1 bin, subtrahiert er 9h).

das Date wird nicht umgewandelt, format liefert einen String zurück,

> In meinem aktuellen Fall, will ich aber nicht, dass er myDate als UTC+1 interpretiert, sondern als UTC.

wer interpretiert wen wann wo warum?
um die aktuelle gleiche Zeit in London zu erhalten formatiere das Date mit einem entsprechenden SimpleDateFormat zu einem String

eine andere Möglichkeit bietet ein Calendar, den kann man auch auf eine Zeitzone setzen,
wenn du dann die Zeit auf 19:00 einstellst ist es bei uns eine andere Zeit, je nachdem wie stark die Zeitzone abweicht,

oder du parst einen nur wenig spezifischen String "23:59" mit SimpleDateFormat zu einem Date,
dann kommt abhängig von der Zeitzone des SimpleDateFormats ein anderes Date raus,
irgendwo auf der Welt wirds schon passend 23:59 sein
 
Zuletzt bearbeitet von einem Moderator:

quaylar

Mitglied
Wenn ich meine Dates aus der DB, von denen ich weiß, dass sie in UTC vorliegen, in PST ausgeben lasse, dann subtrahiert Java 9h obwohl es eigentlich nur 8h subtrahieren sollte.
Java nimmt an, diese Daten wären CET (dann stimmts nämlich mit den 9h) und nicht UTC. Das ist mein Problem...
 
S

SlaterB

Gast
das Datum aus der DB muss gewiss in irgendeiner Art interpretiert werden,
welche Mechanismen dazu einsetzt werden kann ich nicht näher beurteilen,
vielleicht kann man dort was ändern,

aber wenn nicht und wenn du dann ein Date erhälst, was 10:00 in UTC ist, 11:00 in CET und 2:00 irgendwo anders,
und hättest stattdessen lieber eins, welches 11:00 in UTC ist, 12:00 in CET und 3:00 woanders, also um eine Stunde abweichend,
dann ist das meiner Ansicht nach mit Interpretation oder Zeitzone nicht zu erreichen,
dann musst du das Date in einen Calendar stecken und eine Stunde drauf rechnen oder abziehen, was immer aktuell das Problem ist
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M SimpleDateFormat, falsches Jahr Java Basics - Anfänger-Themen 3
N SimpleDateFormat & GregorianCalender Java Basics - Anfänger-Themen 9
M String in Datum umwandeln mit SimpleDateFormat Java Basics - Anfänger-Themen 3
D DateTimeFormatter / SimpleDateFormat.. Java Basics - Anfänger-Themen 4
R Erste Schritte Arbeitszeit Zähler bzw Feierabend Uhr | GregorianCalendar | SimpleDateFormat| Java Basics - Anfänger-Themen 3
G am/pm mit SimpleDateFormat Java Basics - Anfänger-Themen 3
M problem mit simpledateformat Java Basics - Anfänger-Themen 2
M SimpleDateFormat Problem Java Basics - Anfänger-Themen 3
R SimpleDateFormat Java Basics - Anfänger-Themen 5
Benji0815 SimpleDateFormat Java Basics - Anfänger-Themen 2
P SimpleDateFormat Java Basics - Anfänger-Themen 5
Pir0x Problem mit SimpleDateFormat Java Basics - Anfänger-Themen 6
A Frage bei der Formatierung von SimpleDateFormat Java Basics - Anfänger-Themen 7
G SimpleDateFormat geht eine Stunde nach Java Basics - Anfänger-Themen 4
D SimpleDateFormat in String umwandeln Java Basics - Anfänger-Themen 7
J SimpleDateFormat funktioniert nicht richtig? Java Basics - Anfänger-Themen 3
A SimpleDateFormat und monate 0 akzeptieren Java Basics - Anfänger-Themen 27
T SimpleDateFormat-Problem in Linux-Umgebung Java Basics - Anfänger-Themen 2
O SimpleDateFormat Probleme bei 12:00 Uhr und 12:30 Uhr Java Basics - Anfänger-Themen 2
G SimpleDateFormat Java Basics - Anfänger-Themen 9
A Wochentag über SimpleDateFormat bringt wirre Ergebnisse Java Basics - Anfänger-Themen 4
S SimpleDateFormat --> eclipse meldet Date ist mehrdeutig ? Java Basics - Anfänger-Themen 3
L Zeitzone berücksichtigen Java Basics - Anfänger-Themen 1
I DateFormat und die Zeitzone Java Basics - Anfänger-Themen 7
T Uhrzeit und Zeitzone? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben