{ Schreiberling: Patrick Weber Datum: 2011/01/14 Zeitzonenanpassung erfolgt mit der Variablen TIMEZONE_OFFSET (gesetzt für GMT+01:00) --->(UNIXZEIT)--|JAHR|----|MONAT|----|TAG|----|STUNDE|----|MINUTE|----|SEKUNDE|---> Berechnet aus gegebenen Werten die Unixzeit und legt sie in die Variable UNIX_ZEIT. --->(UNIXZEIT_JETZT)---> Berechnet die Unixzeit der aktuellen Zeit und legt sie in die Variable UNIX_ZEIT. --->(UNIXZEIT_AUS_STRING)--|DATE_|---> Verarbeitet das me10-interne Datumsformat, das auch die Funktion (DATE) wiedergibt, berechnet daraus die Unixzeit und legt sie in die Variable UNIX_ZEIT. Folgende Stringformate können beispielsweise verarbeitet werden: '4-Jan-2011 22:59:06' (=ge"TRIM"mte Datumsangabe) ' 4-Jan-2011 22:59:06' '14-Jan-2011 22:59:06' } LET UNIX_ZEIT 0 { globale Variable zum Abgreifen der errechneten Werte } DEFINE UNIXZEIT PARAMETER JAHR PARAMETER MONAT PARAMETER TAG PARAMETER STUNDE PARAMETER MINUTE PARAMETER SEKUNDE LOCAL JAHRE LOCAL SCHALTJAHRE LOCAL TIMEZONE_OFFSET CREATE_LTAB 12 1 'tage_bis_monatsanfang' {ohne Schalttag} WRITE_LTAB 'tage_bis_monatsanfang' 1 1 0 WRITE_LTAB 'tage_bis_monatsanfang' 2 1 31 WRITE_LTAB 'tage_bis_monatsanfang' 3 1 59 WRITE_LTAB 'tage_bis_monatsanfang' 4 1 90 WRITE_LTAB 'tage_bis_monatsanfang' 5 1 120 WRITE_LTAB 'tage_bis_monatsanfang' 6 1 151 WRITE_LTAB 'tage_bis_monatsanfang' 7 1 181 WRITE_LTAB 'tage_bis_monatsanfang' 8 1 212 WRITE_LTAB 'tage_bis_monatsanfang' 9 1 243 WRITE_LTAB 'tage_bis_monatsanfang' 10 1 273 WRITE_LTAB 'tage_bis_monatsanfang' 11 1 304 WRITE_LTAB 'tage_bis_monatsanfang' 12 1 334 LET TIMEZONE_OFFSET 3600 { Zeitzonendifferenz der deutschen Zeit zur UTC in Sekunden } LET JAHRE (JAHR-1970) LET SCHALTJAHRE (ROUND (((JAHR-1)-1968)/4 - ((JAHR-1)-1900)/100 + ((JAHR-1)-1600)/400 -0.5)) { -0.5 sichert das Abrunden } LET UNIX_ZEIT (SEKUNDE + 60*MINUTE + 3600*STUNDE + ((READ_LTAB 'tage_bis_monatsanfang' MONAT 1)+TAG-1)*86400 + (JAHRE*365+SCHALTJAHRE)*86400 - TIMEZONE_OFFSET) IF ((MONAT>2) AND (((JAHR MOD 4)=0) AND ((JAHR MOD 100)<>0 OR ((JAHR MOD 400)=0)))) LET UNIX_ZEIT (UNIX_ZEIT+86400) { +Schalttag wenn Jahr Schaltjahr ist } END_IF END_DEFINE DEFINE UNIXZEIT_JETZT LOCAL DATUM LOCAL TAG LOCAL MONAT_ LOCAL MONAT LOCAL JAHR LOCAL STUNDE LOCAL MINUTE LOCAL SEKUNDE LET DATUM (DATE) LET JAHR (VAL (SUBSTR DATUM 8 4)) LET MONAT_ (LWC (SUBSTR DATUM 4 3)) IF (MONAT_='jan') LET MONAT 1 END_IF IF (MONAT_='feb') LET MONAT 2 END_IF IF (MONAT_='mar') LET MONAT 3 END_IF IF (MONAT_='apr') LET MONAT 4 END_IF IF (MONAT_='may') LET MONAT 5 END_IF IF (MONAT_='jun') LET MONAT 6 END_IF IF (MONAT_='jul') LET MONAT 7 END_IF IF (MONAT_='aug') LET MONAT 8 END_IF IF (MONAT_='sep') LET MONAT 9 END_IF IF (MONAT_='oct') LET MONAT 10 END_IF IF (MONAT_='nov') LET MONAT 11 END_IF IF (MONAT_='dec') LET MONAT 12 END_IF LET TAG (VAL (SUBSTR DATUM 1 2)) LET STUNDE (VAL (SUBSTR DATUM 13 2)) LET MINUTE (VAL (SUBSTR DATUM 16 2)) LET SEKUNDE (VAL (SUBSTR DATUM 19 2)) UNIXZEIT JAHR MONAT TAG STUNDE MINUTE SEKUNDE END_DEFINE DEFINE UNIXZEIT_AUS_STRING PARAMETER DATE_ LOCAL DATUM LOCAL TAG LOCAL MONAT_ LOCAL MONAT LOCAL JAHR LOCAL STUNDE LOCAL MINUTE LOCAL SEKUNDE IF ((LEN DATE_)=19) { Zeitangabe sollte 20 Zeichen lang sein (Bsp: ' 4-Jan-2011 22:59:06') } LET DATE_ (' '+DATE_) END_IF LET DATUM (DATE_) LET JAHR (VAL (SUBSTR DATUM 8 4)) LET MONAT_ (LWC (SUBSTR DATUM 4 3)) IF (MONAT_='jan') LET MONAT 1 END_IF IF (MONAT_='feb') LET MONAT 2 END_IF IF (MONAT_='mar') LET MONAT 3 END_IF IF (MONAT_='apr') LET MONAT 4 END_IF IF (MONAT_='may') LET MONAT 5 END_IF IF (MONAT_='jun') LET MONAT 6 END_IF IF (MONAT_='jul') LET MONAT 7 END_IF IF (MONAT_='aug') LET MONAT 8 END_IF IF (MONAT_='sep') LET MONAT 9 END_IF IF (MONAT_='oct') LET MONAT 10 END_IF IF (MONAT_='nov') LET MONAT 11 END_IF IF (MONAT_='dec') LET MONAT 12 END_IF LET TAG (VAL (SUBSTR DATUM 1 2)) LET STUNDE (VAL (SUBSTR DATUM 13 2)) LET MINUTE (VAL (SUBSTR DATUM 16 2)) LET SEKUNDE (VAL (SUBSTR DATUM 19 2)) UNIXZEIT JAHR MONAT TAG STUNDE MINUTE SEKUNDE END_DEFINE