Source/ Codesnippets | | | | Sven Bader | peux cela XProfan wirklich pas? aussi im Forum habe je seulement Lösungen avec komplizierten Berechnungen trouvé. cet Solution ici verwendet qui Windows API. Es funktioniert problemlos aussi dans alten XProfan Versionen.
UPDATE: il peut eh bien aussi un lesbares date dans une Timestamp konvertieren
UPDATE 2: Bereiche volonté réglé freigegeben, neuere XProfan Versionen marcher eh bien aussi avec QuadInt et so avec données sur 2038 hinaus, ältere XProfan Versionen conservé un Fallback
Def RtlSecondsSince1970ToTime(2) !"ntdll.dll", "RtlSecondsSince1970ToTime"
Def RtlTimeToSecondsSince1970(2) !"ntdll.dll", "RtlTimeToSecondsSince1970"
Def FileTimeToSystemTime(2) !"Kernel32.dll", "FileTimeToSystemTime"
Def SystemTimeToFileTime(2) !"Kernel32.dll", "SystemTimeToFileTime"
Struct SYSTEMTIME = y%,m%,w%,d%,h%,i%,s%,millisecond%
Proc Date2UnixTime
Paramètres dateString$
Déclarer systemTime#, datePart$, timePart$, fileTime#
Faible systemTime#, SYSTEMTIME
Faible fileTime#,8
datePart$ = $ Substr(dateString$,1," ")'date
timePart$ = $ Substr(dateString$,2," ")'l'heure
systemTime#.y% = Val($ Substr(datePart$,1,"-"))// l'an
systemTime#.m% = Val($ Substr(datePart$,2,"-"))// mois
systemTime#.d% = Val($ Substr(datePart$,3,"-"))// journée
systemTime#.h% = Val($ Substr(timePart$,1,»))// heure
systemTime#.i% = Val($ Substr(timePart$,2,»))// minute
systemTime#.s% = Val($ Substr(timePart$,3,»))// seconde
systemTime#.millisecond% = 0// Millisekunde
SystemTimeToFileTime(systemTime#, fileTime#)
$IFDEF VER12.0
Déclarer Quad unixTimeQuad
RtlTimeToSecondsSince1970(fileTime#, Addr(unixTimeQuad))
Dispose fileTime#, systemTime#
Retour unixTimeQuad
$ELSE
'attention Quadint, cela funktioniert seulement jusqu'à 2038!
Déclarer unixTime&, unixTime#
Faible unixTime#,8
RtlTimeToSecondsSince1970(fileTime#,unixTime#)
unixTime& = Long(unixTime#,0)
Dispose fileTime#, systemTime#, unixTime#
Retour unixTime&
$ENDIF
ENDPROC
Proc UnixTime2Date
Paramètres fileTime&
Déclarer fileTime#, t#, output$
Faible fileTime#,8
Faible t#, SYSTEMTIME
RtlSecondsSince1970ToTime(fileTime&, fileTime#)
FileTimeToSystemTime(fileTime#, t#)
output$ = Str$( t#.d%) + "." + Str$(t#.m%) +"." + Str$(t#.y%) + " " + Str$(t#.h%) + » + Str$(t#.i%) +» + Str$(t#.s%)
Dispose t#, fileTime#
Retour output$
ENDPROC
Cls
Imprimer UnixTime2Date(2504776539)
Imprimer Date2UnixTime("2049-05-16 11:15:39")
WaitKey
Fin
|
| | | | |
| | Georg Teles | intéressant,
funktioniert problemlos avec 8, 10, x2 et x4 sur jeden le cas |
| | | | |
| | Jens-Arne Reumschüssel | Salut,
très intéressant! peux on bestimmt la fois bien verwenden.
Kleine Anmerkung: je ne sais pas, si es si bien ist, aiguille sur bistrot deklarierte Bereichsvariablen comme Proc-Ergebnisse zurückzugeben. qui volonté so nirgends plus disposed (=Speicherleck, jedenfalls mindestens au cours de qui Programmlaufzeit, sofern XProfan ou bien Windows cela beim Programmende behebt, sonst permanent, jusqu'à qui ordinateur récente gestartet wird).
Beste Grüße, Jens-Arne |
| | | XProfan X4XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 05.07.2024 ▲ |
| |
| | Sven Bader | UPDATE: qui neuste Version est sich im Original-Beitrag entier dessus!
merci pour cela Feedback Jens-Arne!
je fand qui Zwischenschritte comme Funktion entier gentil mais letztendlich braucht on vous pas et es wird lesbarer et leichter trop verwenden sans:
Def RtlSecondsSince1970ToTime(2) !"ntdll.dll", "RtlSecondsSince1970ToTime"
Def RtlTimeToSecondsSince1970(2) !"ntdll.dll", "RtlTimeToSecondsSince1970"
Def FileTimeToSystemTime(2) !"Kernel32.dll", "FileTimeToSystemTime"
Def SystemTimeToFileTime(2) !"Kernel32.dll", "SystemTimeToFileTime"
Struct SYSTEMTIME = y%,m%,w%,d%,h%,i%,s%,millisecond%
Proc FileTimeToUnixTime
Paramètres dateString$
Déclarer systemTime#, datePart$, timePart$, fileTime#, filetime&, unixTime&, unixTime#
Faible systemTime#, SYSTEMTIME
Faible fileTime#,8
Faible unixTime#,8
datePart$ = $ Substr(dateString$,1," ")'date
timePart$ = $ Substr(dateString$,2," ")'l'heure
systemTime#.y% = Val($ Substr(datePart$,1,"-"))// l'an
systemTime#.m% = Val($ Substr(datePart$,2,"-"))// mois
systemTime#.d% = Val($ Substr(datePart$,3,"-"))// journée
systemTime#.h% = Val($ Substr(timePart$,1,»))// heure
systemTime#.i% = Val($ Substr(timePart$,2,»))// minute
systemTime#.s% = Val($ Substr(timePart$,3,»))// seconde
systemTime#.millisecond% = 0// Millisekunde
SystemTimeToFileTime(systemTime#, fileTime#)
RtlTimeToSecondsSince1970(fileTime#, unixTime#)
'attention Quadint, cela funktioniert seulement jusqu'à 2038!
unixTime& = Long(unixTime#,0)
Dispose fileTime#, systemTime#, unixTime#
Retour unixTime&
ENDPROC
Proc FileTimeToReadable
Paramètres fileTime&
Déclarer fileTime#, t#, output$
Faible fileTime#,8
Faible t#, SYSTEMTIME
RtlSecondsSince1970ToTime(fileTime&, fileTime#)
FileTimeToSystemTime(fileTime#, t#)
output$ = Str$( t#.d%) + "." + Str$(t#.m%) +"." + Str$(t#.y%) + " " + Str$(t#.h%) + » + Str$(t#.i%) +» + Str$(t#.s%)
Dispose t#, fileTime#
Retour output$
ENDPROC
Cls
Imprimer FileTimeToReadable(1715858139)
Imprimer FileTimeToUnixTime("2024-05-16 11:15:39")
Waitkey
Fin
|
| | | | |
| | Jens-Arne Reumschüssel | cela sieht doch déjà richtig bien aus!
il peut naturellement un Quad prendre, um aussi dans 15 Jahren encore dabei trop son:
Déclarer Quad unixTimeQuad RtlTimeToSecondsSince1970(fileTime#, Addr(unixTimeQuad)) Retour unixTimeQuad |
| | | XProfan X4XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 06.07.2024 ▲ |
| |
| | Sven Bader | merci! j'ai deinen Vorschlag avec Compiler-Weiche pour neuere XProfan Versionen übernommen et mon par cela dernier Update irreführenden Funktionsnamen geändert. qui Code ist im Original-Beitrag. Aufgrund de Performance et qui Profan2Cpp Kompatibilität hänge je meist selbst encore sur XProfan 11 fest. |
| | | | |
| | Jens-Arne Reumschüssel | j'ai la fois une kleine DLL pour qui Nutzung de QuadInts dans XProfan jusqu'à Version 11 geschrieben, siehe ici: [...]
avec cela sollte on aussi pour ältere Profan-Versionen Deinen schönen UnixTime-Code zukunftsfähig faire peut. Es wird oui überwiegend um Vergleiche de solchen Zeiten aller, et qui peux qui DLL problemlos bewerkstelligen. |
| | | XProfan X4XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 06.07.2024 ▲ |
| |
| | Jens-Arne Reumschüssel | ici une Version, qui pour vieille Profane QuadInt.dll utilise. cela hat aussi den Vorteil, dass cela Ergebnis pas négative dargestellt wird (LongInt ist jusqu'à zum letzten Bit ausgenutzt et dans XProfan nunmal signed), quoi zur Visualisierung qui Sekunden depuis dem 01.01.1970 pas hilfreich ist.
$IFNDEF VER12.0
$I QuadInt.inc
$ENDIF
Def RtlSecondsSince1970ToTime(2) !"ntdll.dll", "RtlSecondsSince1970ToTime"
Def RtlTimeToSecondsSince1970(2) !"ntdll.dll", "RtlTimeToSecondsSince1970"
Def FileTimeToSystemTime(2) !"Kernel32.dll", "FileTimeToSystemTime"
Def SystemTimeToFileTime(2) !"Kernel32.dll", "SystemTimeToFileTime"
Struct SYSTEMTIME = y%,m%,w%,d%,h%,i%,s%,millisecond%
Proc Date2UnixTime
Paramètres dateString$
Déclarer systemTime#, datePart$, timePart$, fileTime#
Faible systemTime#, SYSTEMTIME
Faible fileTime#,8
datePart$ = $ Substr(dateString$,1," ")'date
timePart$ = $ Substr(dateString$,2," ")'l'heure
systemTime#.y% = Val($ Substr(datePart$,1,"-"))// l'an
systemTime#.m% = Val($ Substr(datePart$,2,"-"))// mois
systemTime#.d% = Val($ Substr(datePart$,3,"-"))// journée
systemTime#.h% = Val($ Substr(timePart$,1,»))// heure
systemTime#.i% = Val($ Substr(timePart$,2,»))// minute
systemTime#.s% = Val($ Substr(timePart$,3,»))// seconde
systemTime#.millisecond% = 0// Millisekunde
SystemTimeToFileTime(systemTime#, fileTime#)
$IFDEF VER12.0
Déclarer Quad unixTimeQuad
RtlTimeToSecondsSince1970(fileTime#, Addr(unixTimeQuad))
Dispose fileTime#, systemTime#
Retour unixTimeQuad
$ELSE
'attention Quadint, cela funktioniert seulement jusqu'à 2038!
Déclarer unixTime&, unixTime#
Faible unixTime#,8
RtlTimeToSecondsSince1970(fileTime#,unixTime#)
RtlTimeToSecondsSince1970(fileTime#,QuadAddr(1))
unixTime& = Long(unixTime#,0)
Dispose fileTime#, systemTime#, unixTime#
Retour unixTime&
$ENDIF
ENDPROC
Proc UnixTime2Date
Paramètres fileTime&
Déclarer fileTime#, t#, output$
Faible fileTime#,8
Faible t#, SYSTEMTIME
RtlSecondsSince1970ToTime(fileTime&, fileTime#)
FileTimeToSystemTime(fileTime#, t#)
output$ = Str$( t#.d%) + "." + Str$(t#.m%) +"." + Str$(t#.y%) + " " + Str$(t#.h%) + » + Str$(t#.i%) +» + Str$(t#.s%)
Dispose t#, fileTime#
Retour output$
ENDPROC
Cls
Imprimer UnixTime2Date(2504776539)
$IFDEF VER12.0
Imprimer Date2UnixTime("2049-05-16 11:15:39")
$ELSE
InitQuadInt(1)
Date2UnixTime("2049-05-16 11:15:39")
Imprimer QuadGetStr(1)
$ENDIF
WaitKey
Fin
|
| | | XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 07.07.2024 ▲ |
| |
|
Zum QuelltextOptions du sujet | 851 Views |
Themeninformationencet Thema hat 3 participant: |