Autor Beitrag
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mo 30.03.09 20:58 
user profile iconmatze hat folgendes geschrieben Zum zitierten Posting springen:
Ich konnte es leider nicht testen, weil ich bei der Zeitumstellung nicht dran gedacht habe und im Bett war :-)

Dann schalte doch mal die Synchronisierung aus und stell das Datum auf den 28. März :idea: ;)

user profile iconmatze hat folgendes geschrieben Zum zitierten Posting springen:
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?

TDateTime rechnet IMHO mit der Greenwich Meantime, die keine Sommerzeit besitzt. Ich hab mich das auch schonmal gefragt, nur um dann auf diese Lösung zu kommen. Aber sicher bin ich mir da nicht. :nixweiss:
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mo 30.03.09 20:58 
Du meinst also, was passiert, wenn man den 29.03.2009 02:30 umwandeln möchte? Nichts :mrgreen:

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mo 30.03.09 21:09 
user profile iconGTA-Place hat folgendes geschrieben Zum zitierten Posting springen:
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:

ausblenden Delphi-Quelltext
1:
2:
ShowMessage(FloatToStr(Double(StrToDateTime('29.03.2009 01:30')))); // 39901,0625
ShowMessage(FloatToStr(Double(StrToDateTime('29.03.2009 02:30')))); // 39901,1051666667

Oder gibts da schon wieder keine Sommerzeit? Wie dem auch sei - ich hab jetzt keine SommerZeit das genauer zu untersuchen ;)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Do 02.04.09 08:50 
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
Dann schalte doch mal die Synchronisierung aus und stell das Datum auf den 28. März :idea: ;)

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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.