Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Sommer/ Winterzeit mit Anfang und Ende als String (https://www.delphipraxis.net/188677-sommer-winterzeit-mit-anfang-und-ende-als-string.html)

FarAndBeyond 28. Mär 2016 00:06

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:
// 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???

Sir Rufo 28. Mär 2016 00:24

AW: Sommer/ Winterzeit mit Anfang und Ende als String
 
Diese Informationen bekommt man auch vom Betriebssystem (und werden dort auch aktuell gehalten)

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

FarAndBeyond 28. Mär 2016 00:56

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