• Offizieller Beitrag

    Hi,
    passend zum heutigen Tag :D eine Funktion für das Datums-Management: Ermitteln der Sommerzeit
    _Date_GetSummerTime([$iYEAR=''])

    Edit 03.05.08:

    Habe die Funktion den Änderungen der SZ im Verlauf der Geschichte angepaßt.
    Alles weitere (auch DL) in Post #4

    - gültige Jahreszahlen 1900 bis 2999 (bei keinem Wert wird das aktuelle Jahr verwendet)
    - für Jahreszahlen in denen keine SZ war (oder außerhalb Bereich) wird ein leeres Array zurückgegeben
    - Rückgabe in einem Array; D/BRD: [0][0]=Anfang, [0][1]=Ende; sowj.Zone/DDR: [1][0]=Anfang, [1][1]=Ende
    - Datumsangabe im Kurzdatumsformat der Regioneinstellungen des PC

  • Hallo 'Gemeinde' :D

    Ich habe mich damals auch unter anderem mit der Sommerzeit beschäftigt - Großes Lob an BugFix für die Funktion, leider kann ich mich mal wieder nicht zurückhalten. Meine Interpretation der Funktion fällt so aus:

    PS: bis 1995 endete die Sommerzeit bereits im September, ab 1996 wurde das Ende auf Oktober verschoben.

    Code
    Func _Date_GetSummerTime02($iYEAR='')
    	Local $aSummer[2]
    	If ($iYEAR = '') Or ($iYEAR < 1900) Or ($iYEAR > 2999) Then $iYEAR = @YEAR
    	$aSummer[0] = _DateTimeFormat($iYEAR & '/03/' & 31  - _DateToDayOfWeekISO ( $iYEAR,3,31) - 1,2)
    	$aSummer[1] = _DateTimeFormat($iYEAR & '/10/' & 31  - _DateToDayOfWeekISO ( $iYEAR,10,31) - 1,2)
    	If $iYEAR < 1996 Then
    		$aSummer[1] = _DateTimeFormat($iYEAR & '/09/' & 30  - _DateToDayOfWeekISO ( $iYEAR,9,30) - 1,2)
    	EndIf
    	Return $aSummer
    EndFunc

    Gruß
    Trallala

    Einmal editiert, zuletzt von trallala (17. April 2008 um 14:23)

    • Offizieller Beitrag

    Also, wenn schon meckern, dann bitte gründlich. :D
    Denn die Sommerzeit gab es auch erst ab 1916, wurde 1919 wieder abgeschafft und von 1940-1949 erneut probiert und seit 1980 sind wir endgültig mit diesem Schwachsinn (auch ökonomisch) gesegnet. :wacko:
    Ich hab die Funktion jetzt so angepaßt, dass dies alles berücksichtigt wird.
    Einige Besonderheiten möchte ich mal am Rande erwähnen:
    - die Sommerzeit des Jahres 1940 endete erst 1942 !!
    - 1945 war die SZ im Osten zweiteilig, 2h von Mai-Sep. und 1h bis Nov.
    - 1947 für ganz DE dreiteilig: April/Mai 1h, Mai/Juni 2h, Juni-Okt 1h

    Für Österreich und Schweiz gelten wiederrum andere Zeiten. Das habe ich jedoch außen vor gelassen.

    Edit: Da hatte ich doch glatt übersehen, dass für 1980-1995 bei der Septemberberechnung ab 24. auf So. geprüft werden muß. Ist gefixt.

    Hier also die korrigierte Fassung:

    _Date_GetSummerTime()
    [autoit]

    ;==================================================================================================
    ; Function Name: _Date_GetSummerTime([$iYEAR=''])
    ; Description:: Ermittlung Beginn und Ende der Sommerzeit
    ; Parameter(s): $iYEAR Jahr zwischen 1916 und 2999 (keine SZ von 1919-1939; 1950-1979)
    ; wird kein Wert übergeben, wird das aktuelle Jahr verwendet.
    ; Wird ein Wert außeralb des Bereiches übergeben oder war in dem Jahr
    ; keine SZ, so wird ein leeres Array zurückgegeben
    ; Return Value(s): Array[0][0] Datum Beginn (Kurzdatumsformat lt. Regioneinstellung PC)
    ; in Deutschland / BRD
    ; Array[0][1] Datum Ende (Kurzdatumsformat lt. Regioneinstellung PC)
    ; in Deutschland / BRD
    ; Array[1][0] Datum Beginn (Kurzdatumsformat lt. Regioneinstellung PC)
    ; in Berlin u. sowjetisch besetzter Zone / DDR
    ; Array[1][1] Datum Ende (Kurzdatumsformat lt. Regioneinstellung PC)
    ; in Berlin u. sowjetisch besetzter Zone / DDR
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    #Include <Date.au3>
    Func _Date_GetSummerTime($iYEAR='')
    Local $i, $aSummer[2][2]
    Local $aTime[14][5] = [ _ ; Jahr, Anfang D/BRD, Ende D/BRD, Anfang Ostzone/DDR, Ende Ostzone/DDR
    [1916,'1916/04/30','1916/10/01','',''], _
    [1917,'1917/04/16','1917/09/17','',''], _
    [1918,'1918/04/15','1918/09/16','',''], _
    [1940,'1940/04/01','1940/12/31','',''], _
    [1941,'1941/01/01','1941/12/31','',''], _
    [1942,'1942/01/01','1942/11/02','',''], _
    [1943,'1943/03/29','1943/10/04','',''], _
    [1944,'1944/04/03','1944/09/16','',''], _
    [1945,'1945/04/02','1945/09/16','1945/05/24','1945/11/18'], _
    [1946,'1946/04/14','1946/10/07','1946/04/14','1946/10/07'], _
    [1947,'1947/04/06','1947/10/05','1947/04/06','1947/10/05'], _
    [1948,'1948/04/18','1948/10/03','1948/04/18','1948/10/03'], _
    [1949,'1949/04/10','1949/10/02','1949/04/10','1949/10/02'], _
    [1980,'1980/04/06','1980/09/28','1980/04/06','1980/09/28']]
    If ($iYEAR = '') Then $iYEAR = @YEAR
    If ($iYEAR < 1916) Or ($iYEAR > 1918 And $iYEAR < 1945) Or _
    ($iYEAR > 1949 And $iYEAR < 1980) Or ($iYEAR > 2999) Then Return $aSummer
    Switch $iYEAR
    Case 1916 To 1980
    For $i = 0 To UBound($aTime) -1
    If $aTime[$i][0] = $iYEAR Then ExitLoop
    Next
    $aSummer[0][0] = _DateTimeFormat($aTime[$i][1], 2)
    $aSummer[0][1] = _DateTimeFormat($aTime[$i][2], 2)
    $aSummer[1][0] = _DateTimeFormat($aTime[$i][3], 2)
    $aSummer[1][1] = _DateTimeFormat($aTime[$i][4], 2)
    Case 1981 To 1995
    For $i = 25 To 31
    If _DateToDayOfWeekISO($iYEAR, 3, $i) = 6 Then
    $aSummer[0][0] = _DateTimeFormat($iYEAR & '/03/' & $i, 2)
    $aSummer[1][0] = $aSummer[0][0]
    EndIf
    Next
    For $i = 24 To 30
    If _DateToDayOfWeekISO($iYEAR, 9, $i) = 6 Then
    $aSummer[0][1] = _DateTimeFormat($iYEAR & '/09/' & $i, 2)
    $aSummer[1][1] = $aSummer[0][1]
    EndIf
    Next
    Case Else
    For $i = 25 To 31
    If _DateToDayOfWeekISO($iYEAR, 3, $i) = 6 Then
    $aSummer[0][0] = _DateTimeFormat($iYEAR & '/03/' & $i, 2)
    $aSummer[1][0] = $aSummer[0][0]
    EndIf
    If _DateToDayOfWeekISO($iYEAR,10, $i) = 6 Then
    $aSummer[0][1] = _DateTimeFormat($iYEAR & '/10/' & $i, 2)
    $aSummer[1][1] = $aSummer[0][1]
    EndIf
    Next
    EndSwitch
    Return $aSummer
    EndFunc ;==>_Date_GetSummerTime

    [/autoit]
  • BugFix . Also, wenn schon meckern, dann bitte gründlich: :D

    Okay ! ! !

    Ihr diskutiert noch über Sommerzeit und Winterzeit ???

    Hallo ???

    Bald schon ist Bikini-Zeit ! :D:rofl::D

    Crazy-A

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Bei der Diskusion Sommer und Winterzeit fällt mir die Sig von Bernd670 ein....
    Habe hier mal den Link zu der Seite, da wird unteranderem auch über SOMMERZEIT diskutiert.

    Bernd670 ich hoffe ich durfte die Seite weitergeben. 8o

    LINK

    MfG
    Der_Doc

  • Hi Bugfix,


    vorneweg vielen Dank für die Funktion.


    Aber kannst Du mir erklären, warum ich bei der _DateToDayOfWeekISO nach 7 (i.W. sieben) suchen lassen muss. Laut HIlfe ist die 6 der Sonntag. Bei mir errechnet aber Dein Programm notorisch die letzten Samstage und nicht die letzten Sonntage. Erst wenn ich auf 7 umstelle klappt es. Liegt das an irgendwelchen Systemeinstellungen, die ich in den vergangenen zehn Jahren mal verbogen habe (Ja, ich benutze noch XP). Oder wurde die Funktion verändert, nur die Hilfe nicht?


    MadTax

  • Liegt vermutlich daran, dass die Funktion in der AutoIt Version 3.3.6.0 (7.3.2010) geändert wurde. Laut History:
    "Fixed #1487: _DateToDayOfWeekIso returned 0-6 but should be 1-7 where Monday = 1"

  • Danke schön! Das erklärt den Befund. Und wie kann ich jetzt anregen, dass die Hilfe auch angepasst wird?

    MadTax

  • Also in der engl. Hilfe stimmt es.
    Und für die deutsche Hilfe gibt es hier einen Thread. Vielleicht postest Du das Problem dort.