| |
|
|
Christian Schneider | GetUnixtime() erstellt de el aktuellen Systemzeit una Unix-Timestamp [...] (Sekunden seit 01.01.1970 0:00 Uhr) ->Rückgabewert: Int
UnixToUTC() wandelt una Timestamp en UTC-Tiempo [...] -> Parámetro: Timestamp (Int) -> Rückgabewert: String (Formato: TTMMJJSSmmss)
UnixToLocal() wandelt una Timestamp en lokale Systemzeit -> Parámetro: Timestamp (Int) -> Rückgabewert: String (Formato: TTMMJJSSmmss) KompilierenMarcaSeparaciónDefinitionen
Def GetSystemTime(1) !"Kernel32.dll","GetSystemTime"
Def SystemTimeToTzSpecificLocalTime(3) !"Kernel32.dll","SystemTimeToTzSpecificLocalTime"
Programm start
CLS
var timestamp% = GetUnixtime()
Print "Timestamp: "+str$(timestamp%)
var time_utc$ = UnixToUTC(timestamp%)
Print "UTC-Zeit: "+left$(time_utc$,2)+"."+mid$(time_utc$,3,2)+"."+mid$(time_utc$,5,4)+" - "+mid$(time_utc$,9,2)+":"+mid$(time_utc$,11,2)+":"+mid$(time_utc$,13,2)
var time_lokal$ = UnixToLocal(timestamp%)
Print "Lokalzeit: "+left$(time_lokal$,2)+"."+mid$(time_lokal$,3,2)+"."+mid$(time_lokal$,5,4)+" - "+mid$(time_lokal$,9,2)+":"+mid$(time_lokal$,11,2)+":"+mid$(time_lokal$,13,2)
Waitkey
Programm ende
Proc GetUnixtime
Declare SYSTEMTIME#
Dim SYSTEMTIME#,16
Declare ut_Jahr%,ut_Monat%,ut_Tag%,ut_Stunde%,ut_Minute%,ut_Sekunde%
var ut_schalttag%=0
Declare tage_bis_monatsanfang%[12]
tage_bis_monatsanfang%[0]=0
tage_bis_monatsanfang%[1]=0
tage_bis_monatsanfang%[2]=31
tage_bis_monatsanfang%[3]=59
tage_bis_monatsanfang%[4]=90
tage_bis_monatsanfang%[5]=120
tage_bis_monatsanfang%[6]=151
tage_bis_monatsanfang%[7]=181
tage_bis_monatsanfang%[8]=212
tage_bis_monatsanfang%[9]=243
tage_bis_monatsanfang%[10]=273
tage_bis_monatsanfang%[11]=304
tage_bis_monatsanfang%[12]=334
GetSystemTime(SYSTEMTIME#)
ut_Jahr%=@Word(SYSTEMTIME#,0)
ut_Monat%=@Word(SYSTEMTIME#,2)
ut_Tag%=@Word(SYSTEMTIME#,6)
ut_Stunde%=@Word(SYSTEMTIME#,8)
ut_Minute%=@Word(SYSTEMTIME#,10)
ut_Sekunde%=@Word(SYSTEMTIME#,12)
if (ut_monat%>2) & (ut_jahr% MOD 4 =0) & (ut_jahr% MOD 100 <> 0)
ut_schalttag%=1
elseif (ut_monat%>2) & (ut_jahr% MOD 400 = 0)
ut_schalttag%=1
endif
DISPOSE SYSTEMTIME#
Return ((tage_bis_monatsanfang%[ut_Monat%]*24*60*60) + (ut_Tag%-1)*24*60*60)+ (ut_Sekunde% + ut_Minute%*60 + ut_Stunde%*60*60) + ((ut_Jahr%-1970) * 365 * 24*60*60 + ((((ut_Jahr%-1)-1968)4 - ((ut_Jahr%-1)-1900)100 + ((ut_Jahr%-1)-1600)400)*24*60*60))+(ut_schalttag%*24*60*60)
Endproc
Proc UnixToUTC
Parameters ut_timestamp%,ut_mode%
Declare ut_schaltjahr%,ut_schalttage%,ut_wochentag%
Declare ut_jahr%,ut_monat%,ut_tag%,ut_stunde%,ut_minute%,ut_sekunde%
if ut_mode%=1
select ((ut_timestamp% 86400) mod 7)
caseof 1 Freitag
ut_wochentag%=5
caseof 2 Samstag
ut_wochentag%=6
caseof 3 Sonntag
ut_wochentag%=0
caseof 4 Montag
ut_wochentag%=1
caseof 5 Dienstag
ut_wochentag%=2
caseof 6 Mittwoch
ut_wochentag%=3
caseof 7 Donnerstag
ut_wochentag%=4
endselect
endif
ut_jahr%=ut_timestamp% (365*24*60*60) + 1970
ut_schalttage%=(((ut_Jahr%-1)-1968)4 - ((ut_Jahr%-1)-1900)100 + ((ut_Jahr%-1)-1600)400)
while (ut_timestamp%-(((ut_jahr%-1970)*365+ut_schalttage%)*24*60*60)+3600) < 0
case (ut_timestamp%-(((ut_jahr%-1970)*365+ut_schalttage%)*24*60*60)+3600) < 0:ut_jahr%=ut_jahr%-1
endwhile
if (ut_jahr% MOD 4 =0) & (ut_jahr% MOD 100 <> 0)
ut_schaltjahr%=1
elseif (ut_jahr% MOD 400 = 0)
ut_schaltjahr%=1
endif
ut_timestamp%=(ut_timestamp%-(((ut_jahr%-1970)*365+ut_schalttage%)*24*60*60))
Select (ut_timestamp% (24*60*60) + 1)
CaseOF > 334+ut_schaltjahr%
ut_monat%=12
ut_timestamp%=ut_timestamp%-((334+ut_schaltjahr%)*24*60*60)
CaseOF > 304+ut_schaltjahr%
ut_monat%=11
ut_timestamp%=ut_timestamp%-((304+ut_schaltjahr%)*24*60*60)
CaseOF > 273+ut_schaltjahr%
ut_monat%=10
ut_timestamp%=ut_timestamp%-((273+ut_schaltjahr%)*24*60*60)
CaseOF > 243+ut_schaltjahr%
ut_monat%=9
ut_timestamp%=ut_timestamp%-((243+ut_schaltjahr%)*24*60*60)
CaseOF > 212+ut_schaltjahr%
ut_monat%=8
ut_timestamp%=ut_timestamp%-((212+ut_schaltjahr%)*24*60*60)
CaseOF > 181+ut_schaltjahr%
ut_monat%=7
ut_timestamp%=ut_timestamp%-((181+ut_schaltjahr%)*24*60*60)
CaseOF > 151+ut_schaltjahr%
ut_monat%=6
ut_timestamp%=ut_timestamp%-((151+ut_schaltjahr%)*24*60*60)
CaseOF > 120+ut_schaltjahr%
ut_monat%=5
ut_timestamp%=ut_timestamp%-((120+ut_schaltjahr%)*24*60*60)
CaseOF > 90+ut_schaltjahr%
ut_monat%=4
ut_timestamp%=ut_timestamp%-((90+ut_schaltjahr%)*24*60*60)
CaseOF > 59+ut_schaltjahr%
ut_monat%=3
ut_timestamp%=ut_timestamp%-((59+ut_schaltjahr%)*24*60*60)
CaseOF > 31
ut_monat%=2
ut_timestamp%=ut_timestamp%-(31*24*60*60)
Otherwise
ut_monat%=1
Endselect
ut_tag% = ut_timestamp% (24*60*60) + 1
ut_timestamp% = (ut_timestamp%-((ut_tag%-1) * 24*60*60))
ut_stunde% = ut_timestamp% (60*60)
ut_timestamp% = (ut_timestamp%-((ut_stunde%)*60*60))
ut_minute% = ut_timestamp% 60
ut_timestamp% = (ut_timestamp%-((ut_minute%)*60))
ut_sekunde% = ut_timestamp%
ifnot ut_mode%=1
Return @If(ut_tag%<10,"0","")+str$(ut_tag%)+@If(ut_monat%<10,"0","")+str$(ut_monat%)+str$(ut_jahr%)+@If(ut_stunde%<10,"0","")+ str$(ut_stunde%)+@If(ut_minute%<10,"0","")+str$(ut_minute%)+@If(ut_sekunde%<10,"0","")+str$(ut_sekunde%)
else
Return str$(ut_jahr%)+@If(ut_monat%<10,"0","")+str$(ut_monat%)+str$(ut_wochentag%)+@If(ut_tag%<10,"0","")+str$(ut_tag%)+@If(ut_stunde%<10,"0","")+str$(ut_stunde%)+@If(ut_minute%<10,"0","")+str$(ut_minute%)+@If(ut_sekunde%<10,"0","")+str$(ut_sekunde%)
EndIF
Endproc
Proc UnixToLocal
Parameters u2l%
Declare SYSTEMTIME#,SYSTEMTIME2#,u2l_return$
Dim SYSTEMTIME#,16
Dim SYSTEMTIME2#,16
Declare ut_rückg$
ut_rückg$ = UnixToUTC(u2l%,1)
Word SYSTEMTIME#,0=val(left$(ut_rückg$,4))
Word SYSTEMTIME#,2=val(mid$(ut_rückg$,5,2))
Word SYSTEMTIME#,4=val(mid$(ut_rückg$,7,1))
Word SYSTEMTIME#,6=val(mid$(ut_rückg$,8,2))
Word SYSTEMTIME#,8=val(mid$(ut_rückg$,10,2))
Word SYSTEMTIME#,10=val(mid$(ut_rückg$,12,2))
Word SYSTEMTIME#,12=val(mid$(ut_rückg$,14,2))
Word SYSTEMTIME#,14=1
SystemTimeToTzSpecificLocalTime(0,SYSTEMTIME#,SYSTEMTIME2#)
u2l_return$ = @IF(@Word(SYSTEMTIME2#,6)<10,"0","")+str$(@Word(SYSTEMTIME2#,6))+@IF(@Word(SYSTEMTIME2#,2)<10,"0","")+str$(@Word(SYSTEMTIME2#,2))+str$(@Word(SYSTEMTIME2#,0))+@IF(@Word(SYSTEMTIME2#,8)<10,"0","")+str$(@Word(SYSTEMTIME2#,8))+@IF(@Word(SYSTEMTIME2#,10)<10,"0","")+str$(@Word(SYSTEMTIME2#,10))+@IF(@Word(SYSTEMTIME2#,12)<10,"0","")+str$(@Word(SYSTEMTIME2#,12))
Disponer SYSTEMTIME#,SYSTEMTIME2#
Volver u2l_return$
ENDPROC
|
|
|
| |
|
|
|
Christian Schneider | Fehler en el Schaltjahren Fijo |
|
|
| |
|
|
|
Christian Schneider | Jetzt auch andersrum posible (Timestamp -> Realzeit) Umrechnung en Lokalzeit folgt |
|
|
| |
|
|
|
Dieter Zornow | mmh, en me kommt el 44.01.2009 fuera, bisschen viel Tage. |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 24.05.2010 ▲ |
|
|
|
|
Christian Schneider | Su Antwort ha se desafortunadamente con mi letzten Actualización überschnitten. ¿Puede du el aktuellen Code Por favor, otra vez testen? |
|
|
| |
|
|
|
| @Christian: Siehe auch UnixTime [...] como native Función después de Presentación de WOD - vlt. para Vergleich. Ein nativer Rückweg alÃ
MKTime fehlt me en xpse todavía. |
|
|
| |
|
|
|
Christian Schneider | Der "Rückweg" liegt en. Siehe UnixToUTC()
Aunque como Mustercode wohl más ungeeignet. Steckt doch el una u otros Workaround con drin. Mir gings hauptsächlich en el Timestamp, Der Rest es más una Nebenprodukt de Basteltrieb
Wobei el aktuelle Code en media Tests brauchbare Ergebnisse abliefert
Michaels Code Yo zwischenzeitlich auch entdeckt, allerdings ha mich el Assemblerteil erfolgreich en el Flucht geschlagen ;) |
|
|
| |
|
|
|
Dieter Zornow | Geht desafortunadamente siempre todavía no, siehe Bild |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 25.05.2010 ▲ |
|
|
|
|
| Christian Schneider, Beitrag=57201, Zeitpunkt=24.05.2010
Michaels Code Yo zwischenzeitlich auch entdeckt, allerdings ha mich el Assemblerteil erfolgreich en el Flucht geschlagen ;)
He, Usted necesidad doch sólo Imprimir UnixTime() escribir. ^ ^
Wenn Su UnixToUTC korrekt funktioniert, Yo lo später También me gusta una natives MKTime hacer y lo en XPSE como echte Función integrieren. |
|
|
| |
|
|
|
Christian Schneider | Dieter Zornow, Beitrag=57203, Zeitpunkt=25.05.2010
Geht desafortunadamente siempre todavía no, siehe Bild
Yo habe lo en me otra vez bajo GMT+7 getestet, auch como funktionierts. Sollte also schonmal no a el Zeitzone mentira. Yo podría me theoretisch todavía vorstellen el el Beta eventuell quer schießt. Hab desafortunadamente diesmal el Suscripción soñoliento y kann denke Yo sólo en el Laufe Esta semana así testen. Posesiones dir veces una con 11.2 erstelle exe angehängt.
Editar: Mi natürlich 11.2 |
|
|
| |
|
|
|
| Usted beachtest ya beim Rechnen, dass 32-Bit para una TimeStamp no siempre reichen necesario !? (überschaue Yo ahora no)
Letzter Anhang funktioniert en me hier en una 32-Bit-XP-Home korrekt. |
|
|
| |
|
|
|
Christian Schneider | IF, Beitrag=57204, Zeitpunkt=25.05.2010
He, Usted necesidad doch sólo Imprimir UnixTime() escribir. ^ ^
Das mag ser, pero yo versuche Schnipsel a vermeiden, el Yo nichtmal en el Ansatz verstehe (Ensamblador..).
IF, Beitrag=57204, Zeitpunkt=25.05.2010
Wenn Su UnixToUTC korrekt funktioniert, Yo lo später También me gusta una natives MKTime hacer y lo en XPSE como echte Función integrieren.
Werde dich como no aufhalten ^ ^
Bis para 19. Januar 2038 debería lo con 32Bit no Problemas geben. |
|
|
| |
|
|