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...
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:
// 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);
Bei dieser Formatierung braucht man allerdings 'ne Monospaced Schriftart, sonst sieht das aus wie Kraut und Rüben...
Hat vielleicht noch jemand Verbesserungsvorschläge???