| |
|
|
- page 1 - |
|
Christian Schneider | GetUnixtime() erstellt aus qui aktuellen Systemzeit une Unix-Timestamp [...] (Sekunden depuis 01.01.1970 0:00 montre) ->Rückgabewert: Int
UnixToUTC() wandelt une Timestamp dans UTC-Zeit [...] -> paramètre: Timestamp (Int) -> Rückgabewert: String (Format: TTMMJJSSmmss)
UnixToLocal() wandelt une Timestamp dans lokale Systemzeit -> paramètre: Timestamp (Int) -> Rückgabewert: String (Format: TTMMJJSSmmss) KompilierenMarqueSéparationDefinitionen
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#
Retour u2l_return$
ENDPROC
|
|
|
| |
|
|
|
| |
|
- page 1 - |
|
Dieter Zornow | allez malheureusement toujours pas, 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 habe je zwischenzeitlich aussi entdeckt, allerdings hat mich qui Assemblerteil erfolgreich dans qui Flucht geschlagen ;)
hé, Du brauchst doch seulement Imprimer UnixTime() écrivons. ^ ^
si Dein UnixToUTC korrekt funktioniert, ensuite serait je daraus später aussi volontiers un natives MKTime faire et es dans XPSE comme echte Funktion intégrer. |
|
|
| |
|
|
|
Christian Schneider | Dieter Zornow, Beitrag=57203, Zeitpunkt=25.05.2010
allez malheureusement toujours pas, siehe Bild
j'ai es chez mir nochmal sous GMT+7 getestet, aussi là funktionierts. Sollte alors Schonmal pas à qui Zeitzone liegen. je pourrait mir theoretisch encore présenter cela qui Beta eventuell quer schießt. Hab malheureusement diesmal qui Subscription verschlafen et peux denke je seulement im Laufe qui semaine avec cela testen. Habe dir la fois une avec 11.2 erstelle exe angehängt.
Éditer: mon naturellement 11.2 |
|
|
| |
|
|
|
| Du beachtest déjà beim le calcul, dass 32-Bit pour une TimeStamp pas toujours reichen doit !? (überschaue je maintenant pas)
dernier Anhang funktioniert chez mir ici sur einem 32-Bit-XP-Home korrekt. |
|
|
| |
|
|
|
Christian Schneider | iF, Beitrag=57204, Zeitpunkt=25.05.2010
hé, Du brauchst doch seulement Imprimer UnixTime() écrivons. ^ ^
cela mag son, mais je versuche Schnipsel trop vermeiden, qui je nichtmal im Ansatz verstehe (Assembler..).
iF, Beitrag=57204, Zeitpunkt=25.05.2010
si Dein UnixToUTC korrekt funktioniert, ensuite serait je daraus später aussi volontiers un natives MKTime faire et es dans XPSE comme echte Funktion intégrer.
Werde toi là pas aufhalten ^ ^
jusqu'à zum 19. janvier 2038 sollte es avec 32Bit aucun Probleme donner. |
|
|
| |
|
|
| |
|
- page 2 - |
|
|
| >> qui je nichtmal im Ansatz verstehe (Assembler..).
Nene je crois wir reden aneinander vorbei. KompilierenMarqueSéparation ... et cela wars aussi déjà.
voilà nix avec Assembler - peux on simple so écrivons - s'il te plaît vlt. einmal ausprobieren. |
|
|
| |
|
|
|
Christian Schneider | Allerdings, dachte du beziehst toi sur qui Codevorlage de Michael. Werde je (si je cela Ganze zeitkritischer besoin sollte) sur elle revenir. |
|
|
| |
|
|
|
| je hatte Michaels Code comme Présentation genutzt (si aussi un paire Changements notwendig étions) zum Einbau qui Funktion UnixTime [...] comme "echte" native Funktion - ist comment Du sagst pour zeitkritische Dinge super ou bien si on cet Funktion dans Threads/ CallBacks nutzen mag. mon idée était arrêt, dass Du cela Ergebnis qui une Funktion zum comparaison avec dem Ergebnis qui anderen Funktion nutzen peux. |
|
|
| |
|
|
|
Christian Schneider | Habe la fois verglichen. Entweder allez mon Funktion um 286 Sekunden pour, ou bien deine avant
Habe maintenant nochmal folgende page zum comparaison rangezogen: [...] le son denen scheint mon Wert trop stimmen
Werde aujourd'hui soir nochmal regarder wohin es là u.U. klemmt. |
|
|
| |
|
|
|
| un Grund, weshalb ego comparer pour important arrêt - irgendwo ist oui toujours un Bug. ^ ^ |
|
|
| |
|
|
|
Dieter Zornow | oui tu as droite, es liegt à Beta Version de XProfan, habe den Code justement la fois avec 11.2 getestet, Ergebnis scheint ok. cela muss sich aussi Roland anschauen, quoi là dans 12 de travers fonctionne. |
|
|
| 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
oui tu as droite, es liegt à Beta Version de XProfan, habe den Code justement la fois avec 11.2 getestet, Ergebnis scheint ok. cela muss sich aussi Roland anschauen, quoi là dans 12 de travers fonctionne.
oui, XProfan 12ß hat encore un Problem, si SELECT sur un QuadInt trifft. (un Ergebnis einer ganzzahligen Division est un QuadInt.) Workaround jusqu'à zum prochain Subscriptionsrelease siehe ici: [...]
Salut 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 ▲ |
|
|
|