{
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