Einzelnen Beitrag anzeigen

FarAndBeyond
(Gast)

n/a Beiträge
 
#1

Sommer/ Winterzeit mit Anfang und Ende als String

  Alt 28. Mär 2016, 00:06
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???
  Mit Zitat antworten Zitat