| |
|
|
p.specht
| Unixtime ============ Die Unixtime beginnt als Sekundenzähler mit 0 am Donnerstag, dem 1. Januar 1970 um 00:00 Uhr UTC. Bitte zu beachten, daß wir UTC+1 im Winter und UTC+2 in der Sommerzeit haben. Die Ausgabe bei der Umwandlung wird daher entsprechend der Zeitzone und Periode anzupassen sein. Die Umwandlung wird ganz offiziell dadurch erleichtert, daß Schaltsekunden nicht mitgezählt werden (Diese sollen ja die Abweichung der Erdrotation von einer stetig durchlaufenden Zeit korrigieren).
Das festgelegte Startdatum wird auch als Epoch bezeichnet, was bei 32bit-System wichtig werden wird, denn 2038 wird sich per Unix in etwa das wiederholen, was bei Windows schon als Jahr-2000-Problem bekannt wurde.
In aktuellen Versionen von XProfan kann man das alles eleganter lösen. Für XProfan 11.2 free war die Quelle: Wikipedia "Unixtime" (Java-Beispielcode). Ein deutlich flotteres, in Assembler geschriebenes Unixtime-Programm von M. Wodrich gibt es hier im Board; auch Dieter Zornow hat sich mit dem Problem beschäftigt.
WindowTitle "Konverter Lesbare Zeitangabe zu Unixtime (Sekunde 0 = Do,1.1.1970 00:00 UTC (damals GMT)"
'Vgl:https://www.unixtimestamp.de , www.pagerenk.de/mehr-informationen/tools/timestampconverter.htm
WindowStyle 24:Declare Jahr&,Monat&,Tag&,Stunde&,Minute&,Sekunde&,utcdif&,UXTM&:luup:
CLS:print "\n UTC+1\+2h= ";:input utcdif&
Print "\n JJJJ = ";:input Jahr&:Print " Monat = ";:input Monat&
Print " Tag = ";:input Tag&:Print " Stunden = ";:input Stunde&
Print " Minuten = ";:input Minute&:print " Sekunden = ";:input Sekunde&
UXTM&=Readable2Unixtime(Jahr&,Monat&,Tag&,Stunde&,Minute&,Sekunde&,utcdif&)
locate 12,12:font 2:if (UXTM&<>-1) and (UXTM&<>-2):print UXTM&
clearclip:putclip str$(UXTM&):font 2:print:print "\n ... auch in Zwischenablage."
else:beep:print "E R R O R ";UXTM&:Endif:font 0
waitinput:waitinput:goto "luup"
Proc Readable2Unixtime' Konvertiert gegliederte UTC-Angaben nach Unix-Sekunden
parameters Jahr&,Monat&,Tag&,Stunde&,Minute&,Sekunde&,utcdif&' GETESTET, ABER OHNE JEDE GEWÄHR!
case (jahr&<1970) or (jahr&>2038) or (monat&>12) or (monat&<1) or (tag&<1) or (tag&>31):return -1
case (Stunde&>23) or (Minute&>59) or (Sekunde&>59) :return -2
declare tage_seit_jahresanfang$[],istschaltjahr&,schaltjahre&,tage_seit_1970&
'Anzahl der Tage seit Jahresanfang ohne Tage des aktuellen Monats und ohne Schalttag:
tage_seit_jahresanfang$[]=explode("0,31,59,90,120,151,181,212,243,273,304,334",",")
' Anzahl der Schaltjahre seit 1970 ohne ein evtl. gerade laufendes Schaltjahr
schaltjahre& = ((jahr&-1)-1968)/4 - ((jahr&-1)-1900)/100 + ((jahr&-1)-1600)/400
tage_seit_1970&=(jahr&-1970)*365+schaltjahre&+val(tage_seit_jahresanfang$[monat&-1])+tag&-1
if (jahr& mod 4)=0: istschaltjahr&=1:if (jahr& mod 100)=0: istschaltjahr&=0
case (jahr& mod 400)=0: istschaltjahr&=1
endif:endif' Schalttage+1, wenn angefragte Jahrs Schaltjahr und Termin nach Februar:
case (monat&>2) and istschaltjahr&: inc tage_seit_1970&
return int(sekunde&+60*(minute&+60*(stunde&+24*tage_seit_1970&))-utcdif&*3600)
endproc
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 20.05.2021 ▲ |
|
|
|