Autor |
Beitrag |
matze
      
Beiträge: 4613
Erhaltene Danke: 24
XP home, prof
Delphi 2009 Prof,
|
Verfasst: Mo 30.03.09 20:54
Hallo.
Aus aktuellem Anlass  kam mir diese Frage in den Sinn:
Ich konnte es leider nicht testen, weil ich bei der Zeitumstellung nicht dran gedacht habe und im Bett war
Wie verhält sich denn Delphi bei der Zeitumstellung? Also wenn ich z.b. einen String in ein TDateTime umwandeln will und ich einen Zeitpunkt habe, den es nicht gibt, weil es ihn 2 Mal oder gar nicht gibt?
Wo sind denn die typischen Stolpersteine und wie kann ich die umschiffen?
Danke,
Matze
_________________ In the beginning was the word.
And the word was content-type: text/plain.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 30.03.09 20:58
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Mo 30.03.09 20:58
Du meinst also, was passiert, wenn man den 29.03.2009 02:30 umwandeln möchte? Nichts 
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 30.03.09 21:09
GTA-Place hat folgendes geschrieben : | Du meinst also, was passiert, wenn man den 29.03.2009 02:30 umwandeln möchte? |
Ach, jetzt hab ich das verstanden. Genau, ich hab mich damals gefragt, was passiert, wenn man zu einem UNIX-Timestamp eine halbe Stunde dazuzählt und damit geradewegs in der "verbotenen Zone" landet. Aber von String zu Zeitstempel ist das durchaus ein Problem.
Hm, ich hab das mal ausprobiert:
Delphi-Quelltext 1: 2:
| ShowMessage(FloatToStr(Double(StrToDateTime('29.03.2009 01:30')))); ShowMessage(FloatToStr(Double(StrToDateTime('29.03.2009 02:30')))); |
Oder gibts da schon wieder keine Sommerzeit? Wie dem auch sei - ich hab jetzt keine SommerZeit das genauer zu untersuchen 
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 31.03.09 12:10
Normal unterscheidet man im Amtsdeutsch da zwischen 2:30 A und 2:30 B. Was da nun UTC+1 (Winterzeit) und was UTC+2 (Sommerzeit) angegeben hat, müsste ich nachgucken. Hab da zu hause nen Link zu.
Wie das aber Delphi intern behandelt und OB Delphi mit der A\B-Angabe überhaupt was macht: Ich glaubs nicht 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
matze 
      
Beiträge: 4613
Erhaltene Danke: 24
XP home, prof
Delphi 2009 Prof,
|
Verfasst: Do 02.04.09 08:50
Yogu hat folgendes geschrieben : | Dann schalte doch mal die Synchronisierung aus und stell das Datum auf den 28. März  |
Hmmm... vermutlich werde ich genau das mal machen.
Also hat hier noch niemand damit groß Probleme gehabt oder Erfahrungswerte gesammelt.
Wenn ich dann mal dazu komme, das zu Testen, schreib ich euch hier meine Ergebnisse!
_________________ In the beginning was the word.
And the word was content-type: text/plain.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Do 02.04.09 17:59
Delphi berücksichtigt Sommerzeit/Winterzeit nicht speziell. Gewisse TDateTime Werte werden also effektiv nie angenommen bzw. kommen doppelt vor. Somit wäre im Oktober TDateTime("2:30 A") = TDateTime("2:30 B"). Anders ausgedrückt: Delphi rechnet immer mit 24h-Tagen, egal ob sie effektiv 23h oder 25h lang waren.
Wenn du 29.03.2009 02:30 umwandelst, bekommst du als Nachkommawert wie an jedem anderen Tag auch 2.5/24.
Das ist auch gut so, sonst würde DateTimeToStr nach der Zeitänderung plötzlich andere Werte anzeigen für TDateTime Werte vom Vortag - oder man müsste die Zeitzone mit TDateTime mitspeichern, was nicht der Fall ist.
|
|
|