![]() |
Sommer/ Winterzeit mit Anfang und Ende als String
Mein Ansatz sieht im Moment so aus... (hab' das so in meine Shell eingebaut...)
Vielleicht kann das ja mal jemand gebrauchen... Es sei denn, der Jemand hat schon 'ne viel bessere, intelligentere, kürzere und schnellere Function... dann bleibt er besser bei der... :P btw: die innere Funktion hab' ich irgendwo gefunden... weiß allerdings bei fast 900 TXT-Dateien nicht mehr genau wo....
Delphi-Quellcode:
Function SummerWinterTime(ADate: TDateTime): String;
Var AYear,AMonth,ADay: Word; Beginn,Ende : TDateTime; WinterTime : String; Function IsSummertime(ADate: TDateTime): Boolean; Begin Result:= False; ADate := Trunc(ADate); DecodeDate(ADate, AYear, AMonth, ADay); If AYear < 1980 { Keine Sommerzeit vor 1980 } Then Result:= False Else Begin Beginn:= EncodeDate(AYear, 3, 31); While DayOfWeek(Beginn) <> 1 Do Beginn:= Beginn -1; If AYear <= 1995 Then Ende:= EncodeDate(AYear, 9, 30) { bis 1995: letzter So im September } Else Ende:= EncodeDate(AYear, 10, 31); { ab 1996: letzter So im Oktober } While DayOfWeek(Ende) <> 1 Do Ende:= Ende -1; Result:= (ADate >= Beginn) And (ADate < Ende); End; End; Begin If IsSummertime(ADate) Then Result:= 'SOMMERZEIT'+#13#10+FormatDateTime('dd.mm.yyyy', Beginn)+' 02:00 -> 03:00'+#13#10+FormatDateTime('dd.mm.yyyy', Ende)+' 03:00 -> 02:00' Else Begin WinterTime:= 'WINTERZEIT'; If ADate > StrToDateTime('05.05.'+IntToStr(AYear)) Then Begin WinterTime:= WinterTime +#13#10+FormatDateTime('dd.mm.yyyy', Ende)+' 03:00 -> 02:00'; IsSummertime(StrToDate('05.05.'+IntToStr((AYear +1)))); Result:= WinterTime+#13#10+FormatDateTime('dd.mm.yyyy', Beginn)+' 02:00 -> 03:00'; End Else Begin IsSummertime(StrToDate('05.05.'+IntToStr((AYear -1)))); WinterTime:= WinterTime +#13#10+FormatDateTime('dd.mm.yyyy', Ende)+' 03:00 -> 02:00'; IsSummertime(StrToDate('05.05.'+IntToStr((AYear +1)))); Result:= WinterTime+#13#10+FormatDateTime('dd.mm.yyyy', Beginn)+' 02:00 -> 03:00'; End; End; End;
Delphi-Quellcode:
Bei dieser Formatierung braucht man allerdings 'ne Monospaced Schriftart, sonst sieht das aus wie Kraut und Rüben...
// MEMO:
If (Key = Ord('W')) And (ssCtrl In Shift) Then Begin Memo.SelLength:= 0; Memo.SelText := #13#10+#13#10+SummerWinterTime(Now); End; // LABEL: Label1.Caption:= SummerWinterTime(Now); Hat vielleicht noch jemand Verbesserungsvorschläge??? |
AW: Sommer/ Winterzeit mit Anfang und Ende als String
Diese Informationen bekommt man auch vom Betriebssystem (und werden dort auch aktuell gehalten)
![]() |
AW: Sommer/ Winterzeit mit Anfang und Ende als String
Stimmt, die API... da hatte ich noch gar nicht geschaut...
Funzt ab VistaSP1, aber für XP geht wahrscheinlich auch "GetTimeZoneInformation"... muß ich mir mal in Ruhe anschauen... Danke... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz