Italia
Fonte/ Codesnippets

Datum Timestamp Unix Utc Zeit

 

Christian
Schneider
GetUnixtime() erstellt aus der aktuellen Systemzeit einen Unix-Timestamp [...]  (Sekunden seit 01.01.1970 0:00 Uhr)
->Rückgabewert: Int

UnixToUTC() wandelt einen Timestamp in UTC-Zeit [...] 
-> Parameter: Timestamp (Int)
-> Rückgabewert: String (Format: TTMMJJSSmmss)

UnixToLocal() wandelt einen Timestamp in lokale Systemzeit
-> Parameter: Timestamp (Int)
-> Rückgabewert: String (Format: TTMMJJSSmmss)
KompilierenMarkierenSeparieren
Definitionen
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))
    Dispose SYSTEMTIME#,SYSTEMTIME2#
    Return u2l_return$

Endproc

 
XProfan 11| Vista(64) SP2
24.05.2010  
 




Christian
Schneider
Fehler bei den Schaltjahren behoben
 
XProfan 11| Vista(64) SP2
24.05.2010  
 




Christian
Schneider
Jetzt auch andersrum possibile (Timestamp -> Realzeit)
Umrechnung in Lokalzeit folgt
 
XProfan 11| Vista(64) SP2
24.05.2010  
 




Dieter
Zornow
mmh, bei mir kommt der 44.01.2009 raus, 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
Deine Antwort hat sich leider mit meinem letzten Update überschnitten. Kannst du den aktuellen Code bitte nochmal testen?
 
XProfan 11| Vista(64) SP2
24.05.2010  
 



@Christian: Siehe auch UnixTime [...]  als native Funktion nach Vorlage von WOD - vlt. zum Vergleich. Ein nativer Rückweg alà MKTime fehlt mir in xpse noch.
 
24.05.2010  
 




Christian
Schneider
Der "Rückweg" liegt bei. Siehe UnixToUTC()

Allerdings als Mustercode wohl eher ungeeignet. Steckt doch der ein oder andere Workaround mit drin. Mir gings hauptsächlich um den Timestamp, Der Rest ist eher ein Nebenprodukt aus Basteltrieb

Wobei der aktuelle Code bei meinen Tests brauchbare Ergebnisse abliefert

Michaels Code habe ich zwischenzeitlich auch entdeckt, allerdings hat mich der Assemblerteil erfolgreich in die Flucht geschlagen ;)
 
XProfan 11| Vista(64) SP2
24.05.2010  
 




Dieter
Zornow
Geht leider immer noch nicht, siehe Bild

29 kB
Hochgeladen:25.05.2010
Downloadcounter233
Download
 
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 habe ich zwischenzeitlich auch entdeckt, allerdings hat mich der Assemblerteil erfolgreich in die Flucht geschlagen ;)


He, Du brauchst doch nur Print UnixTime() schreiben. ^^

Wenn Dein UnixToUTC korrekt funktioniert, dann würde ich daraus später auch gerne ein natives MKTime machen und es in XPSE als echte Funktion integrieren.
 
25.05.2010  
 




Christian
Schneider
Dieter Zornow, Beitrag=57203, Zeitpunkt=25.05.2010
Geht leider immer noch nicht, siehe Bild


Ich habe es bei mir nochmal unter GMT+7 getestet, auch da funktionierts. Sollte also schonmal nicht an der Zeitzone liegen.
Ich potuto mir theoretisch noch vorstellen das die Beta eventuell quer schießt. Hab leider diesmal die Subscription verschlafen und kann denke ich erst im Laufe der Woche damit testen. Habe dir mal eine mit 11.2 erstelle exe angehängt.

Edit: Meine naturalmente 11.2

1.037 kB
Hochgeladen:25.05.2010
Downloadcounter141
Download
31 kB
Hochgeladen:25.05.2010
Downloadcounter227
Download
 
XProfan 11| Vista(64) SP2
25.05.2010  
 



Du beachtest schon beim Rechnen, dass 32-Bit per einen TimeStamp nicht immer reichen müssen !? (überschaue ich jetzt nicht)

Letzter Anhang funktioniert bei mir hier auf einem 32-Bit-XP-Home korrekt.
 
25.05.2010  
 




Christian
Schneider
iF, Beitrag=57204, Zeitpunkt=25.05.2010
He, Du brauchst doch nur Print UnixTime() schreiben. ^^


Das mag sein, aber ich versuche Schnipsel zu vermeiden, die ich nichtmal im Ansatz verstehe (Assembler..).

iF, Beitrag=57204, Zeitpunkt=25.05.2010
Wenn Dein UnixToUTC korrekt funktioniert, dann würde ich daraus später auch gerne ein natives MKTime machen und es in XPSE als echte Funktion integrieren.


Werde dich da nicht aufhalten ^^

Bis zum 19. Januar 2038 sollte es mit 32Bit keine Probleme geben.
 
XProfan 11| Vista(64) SP2
25.05.2010  
 




Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

20.935 Views

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie