Deutsch
Quelltexte/ Codesnippets

Datum Timestamp Unix Utc Zeit

 
- Seite 1 -



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  
 



 
- Seite 1 -



Dieter
Zornow
Geht leider immer noch nicht, siehe Bild

29 kB
Hochgeladen:25.05.2010
Ladeanzahl233
Herunterladen
 
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 könnte 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 natürlich 11.2

1.037 kB
Hochgeladen:25.05.2010
Ladeanzahl141
Herunterladen
31 kB
Hochgeladen:25.05.2010
Ladeanzahl227
Herunterladen
 
XProfan 11| Vista(64) SP2
25.05.2010  
 



Du beachtest schon beim Rechnen, dass 32-Bit für 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  
 



 
- Seite 2 -


>> die ich nichtmal im Ansatz verstehe (Assembler..).

Nene ich glaube wir reden aneinander vorbei.
KompilierenMarkierenSeparieren
 {$cleq}
cls
print UnixTime()
print test()
WaitINput
End

nproc test//eine einzige nProc im Code reicht aus um den nativen Sprachschatz auch für den nicht-nativen Bereich (print UnixTime()) zu aktivieren.

    return 55

endproc


... und das wars auch schon.

Da ist nix mit Assembler - kann man einfach so schreiben - bitte vlt. einmal ausprobieren.
 
25.05.2010  
 




Christian
Schneider
Allerdings, dachte du beziehst dich auf die Codevorlage von Michael. Werde ich (wenn ich das Ganze zeitkritischer benötigen sollte) drauf zurückkommen.
 
XProfan 11| Vista(64) SP2
25.05.2010  
 



Ich hatte Michaels Code als Vorlage genutzt (wenn auch ein paar Änderungen notwendig waren) zum Einbau der Funktion UnixTime [...]  als "echte" native Funktion - ist wie Du sagst für zeitkritische Dinge super oder wenn man diese Funktion in Threads/ CallBacks nutzen mag. Mein Gedanke war halt, dass Du das Ergebnis der einen Funktion zum Vergleich mit dem Ergebnis der anderen Funktion nutzen kannst.
 
25.05.2010  
 




Christian
Schneider
Habe mal verglichen. Entweder geht meine Funktion um 286 Sekunden nach, oder deine vor

Habe jetzt nochmal folgende Seite zum Vergleich rangezogen: [...] 
Laut denen scheint mein Wert zu stimmen

Werde heute Abend nochmal schauen wo es da u.U. klemmt.
 
XProfan 11| Vista(64) SP2
25.05.2010  
 



Ein Grund, weshalb ichs Vergleichen für wichtig halt - irgendwo ist ja immer ein Bug. ^^
 
25.05.2010  
 




Dieter
Zornow
Ja du hast recht, es liegt an Beta Version von XProfan, habe den Code gerade mal mit 11.2 getestet, Ergebnis scheint ok.
Das muss sich auch Roland anschauen, was da in 12 schief läuft.
 
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  
 




RGH
Dieter Zornow, Beitrag=57219, Zeitpunkt=25.05.2010
Ja du hast recht, es liegt an Beta Version von XProfan, habe den Code gerade mal mit 11.2 getestet, Ergebnis scheint ok.
Das muss sich auch Roland anschauen, was da in 12 schief läuft.


Ja, XProfan 12ß hat noch ein Problem, wenn SELECT auf ein QuadInt trifft. (Ein Ergebnis einer ganzzahligen Division ist ein QuadInt.)
Workaround bis zum nächsten Subscriptionsrelease siehe hier:
[...] 

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
26.05.2010  
 




Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

20.696 Betrachtungen

Unbenanntvor 0 min.
Sven Bader16.05.2024
H.Brill11.11.2022
Jens-Arne Reumschüssel16.05.2021
Thomas Zielinski12.02.2021
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


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