whizzle Geschrieben 23. Mai 2005 Teilen Geschrieben 23. Mai 2005 Hallo zusammen, mein Code gibt mir folgende Trace-Meldungen: Aktuelle Zeit: <23-MAY-05 01.12.45.374533000 PM +02:00>; Zeit_Aktion: <23-MAY-05 01.12.38.247789 PM>; Restzeit: <+00 01:59:52.873404> Hintergrund ist folgender: Es existiert eine Tabelle, welche Events definiert und dazu die Zeit, zu der das Event ausgeführt werden soll (s.o. Zeit_Aktion). Der Datentyp ist TIMESTAMP. Nun holt sich die SW die aktuelle Zeit per SYSTIMESTAMP (s.o. Aktuelle Zeit) und berechnet die Restdauer bis zur Eventausführung (also Zeit_Aktion minus Aktuelle Zeit), falls Zeit_Aktion > Aktuelle Zeit. Das Ergebnis wird in einer Variable vom Typ INTERVAL DAY TO SECOND festgehalten und im Trace als Restzeit ausgegeben. Was ich nicht verstehe: wie oben zu sehen, beträgt die Differenz zw. Aktueller Zeit und Zeit_Aktion knapp 2h (siehe Restzeit), obwohl die Zeiten selbst nur Sekunden auseinanderliegen. Außerdem ist für die SW der Vergleich (Zeit_Aktion > Aktuelle Zeit) TRUE. Kann mir das bitte jemand erklären?!? Die Datenbank ist übrigens eine Oracle 9i. Thx Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SNOWMAN Geschrieben 23. Mai 2005 Teilen Geschrieben 23. Mai 2005 die beiden zeitangaben sind in unterscheidlichen zeitzonen, zu sehen daran das aktuelle zeit ein +02:00 dahinter hat ich schätze dass das programmintern erkannt wird und die zeit_aktion ein +2 stunden bekommt und dann erst die differenz berechnet wird. aber wieso er sagt das zeit_aktion > zeit_aktuell wahr ist versteh ich irgendwie auch nicht o_O Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Enno Geschrieben 23. Mai 2005 Teilen Geschrieben 23. Mai 2005 @SNOWMAN die frage beantwortest du doch selber: Zeit_Aktion + (2h Zeitzonenunterschied) > Aktuelle Zeit Das Verhalten ist mir zwar so auch nicht bekannt. Aber erklärbar. Der Rechner Läuft auf MESZ (Also UTC +2) Die Aktionen werden hier als UTC Time abgelegt. Also AktionsZeit +2 = Ausführungszeit auf dem lokalen Rechner. Gruß Enno Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SNOWMAN Geschrieben 23. Mai 2005 Teilen Geschrieben 23. Mai 2005 *ans hirn batsch* oh wei oh wei, wo bin ich nur mit meinen gedanken... is klar, zeit_aktion+2 > zeit_jetzt = wahr, ergibt voll und ganz sinn... Das verhalten kann unterschiedliche gründe haben. - es ist softwaretechnisch implementiert das die Zeitzonen erkannt und aufeinander abgestimmt werden - es ist systemtechnisch das beim berechnen von timestamps so oder so, alle timestamps immer in der gleichen zeitzone sind (unix sekunden seit blub greenwichtime) und lediglich die ausgabe durch die zeitzone geändert wird. vermute ich vllt. hast du aber auch nur ein paar kleine gizmos in deinem rechner die die bits und byts auf den platinen einfangen und zu ihrem heimatplaneten zorg schicken und dafür irgendwelche flaschen infos in die leitungen pflanzen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
whizzle Geschrieben 23. Mai 2005 Autor Teilen Geschrieben 23. Mai 2005 Daran denke ich auch die ganze Zeit! Aber warum werden dann in folgendem Code... declare ts1 TIMESTAMP := SYSTIMESTAMP; ts2 TIMESTAMP WITH TIME ZONE:= SYSTIMESTAMP; ts3 TIMESTAMP WITH LOCAL TIME ZONE:= SYSTIMESTAMP; begin dbms_output.put_line(ts3-ts1); dbms_output.put_line(ts3-ts2); dbms_output.put_line(ts2-ts1); end; die Zeitzonen gar nicht beachtet? Guckst Du hier: +000000000 00:00:00.000213000 +000000000 00:00:00.000046000 +000000000 00:00:00.000167000 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.