Fuente/ Codesnippets | | | | Sven Bader | Kann el XProfan wirklich no? Auch en el Foro Yo sólo Lösungen con komplizierten Berechnungen gefunden. Diese Solución hier verwendet el Windows API. Lo funktioniert problemlos auch en alten XProfan Versionen.
UPDATE: uno kann nun auch una lesbares Datum en una Timestamp konvertieren
UPDATE 2: Bereiche voluntad ordentlich freigegeben, neuere XProfan Versionen trabajo nun auch con QuadInt y así con Daten encima 2038 hinaus, ältere XProfan Versionen obtener una 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
Parámetros dateString$
Declarar systemTime#, datePart$, timePart$, fileTime#
Dim systemTime#, SYSTEMTIME
Dim fileTime#,8
datePart$ = Substr$(dateString$,1," ")'Datum
timePart$ = Substr$(dateString$,2," ")'Uhrzeit
systemTime#.y% = Val(Substr$(datePart$,1,"-"))// Jahr
systemTime#.m% = Val(Substr$(datePart$,2,"-"))// Monat
systemTime#.d% = Val(Substr$(datePart$,3,"-"))// Tag
systemTime#.h% = Val(Substr$(timePart$,1,":"))// Stunde
systemTime#.i% = Val(Substr$(timePart$,2,":"))// Minute
systemTime#.s% = Val(Substr$(timePart$,3,":"))// Sekunde
systemTime#.millisecond% = 0// Millisekunde
SystemTimeToFileTime(systemTime#, fileTime#)
$IFDEF VER12.0
Declarar Quad unixTimeQuad
RtlTimeToSecondsSince1970(fileTime#, Addr(unixTimeQuad))
Disponer fileTime#, systemTime#
Volver unixTimeQuad
$ELSE
'Achtung Quadint, el funktioniert sólo a 2038!
Declarar unixTime&, unixTime#
Dim unixTime#,8
RtlTimeToSecondsSince1970(fileTime#,unixTime#)
unixTime& = Largo(unixTime#,0)
Disponer fileTime#, systemTime#, unixTime#
Volver unixTime&
$ENDIF
ENDPROC
Proc UnixTime2Date
Parámetros fileTime&
Declarar fileTime#, t#, output$
Dim fileTime#,8
Dim 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%)
Disponer t#, fileTime#
Volver output$
ENDPROC
Cls
Imprimir UnixTime2Date(2504776539)
Imprimir Date2UnixTime("2049-05-16 11:15:39")
WaitKey
End
|
| | | | |
| | Georg Teles | Interessant,
funktioniert problemlos con 8, 10, x2 y x4 en cada Fall |
| | | | |
| | Jens-Arne Reumschüssel | ¡Hola,
muy interessant! Kann uno determinado veces bien uso.
Kleine Anmerkung: Yo weiß no, si tan bueno es, Zeiger en lokal deklarierte Bereichsvariablen como Proc-Ergebnisse zurückzugeben. El voluntad así nirgends mehr disposed (=Speicherleck, jedenfalls mindestens während el Programmlaufzeit, sofern XProfan oder Windows el beim Programmende behebt, sonst permanent, a el Computer neu comenzó se).
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: El neuste Versión befindet se en el Original-Contribución bastante oben!
Gracias para el Feedback Jens-Arne!
Yo fand el Zwischenschritte como Función bastante nett aber letztendlich braucht uno ellos no y lo se lesbarer y leichter utilizarse sin:
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
Parámetros dateString$
Declarar systemTime#, datePart$, timePart$, fileTime#, filetime&, unixTime&, unixTime#
Dim systemTime#, SYSTEMTIME
Dim fileTime#,8
Dim unixTime#,8
datePart$ = Substr$(dateString$,1," ")'Datum
timePart$ = Substr$(dateString$,2," ")'Uhrzeit
systemTime#.y% = Val(Substr$(datePart$,1,"-"))// Jahr
systemTime#.m% = Val(Substr$(datePart$,2,"-"))// Monat
systemTime#.d% = Val(Substr$(datePart$,3,"-"))// Tag
systemTime#.h% = Val(Substr$(timePart$,1,":"))// Stunde
systemTime#.i% = Val(Substr$(timePart$,2,":"))// Minute
systemTime#.s% = Val(Substr$(timePart$,3,":"))// Sekunde
systemTime#.millisecond% = 0// Millisekunde
SystemTimeToFileTime(systemTime#, fileTime#)
RtlTimeToSecondsSince1970(fileTime#, unixTime#)
'Achtung Quadint, el funktioniert sólo a 2038!
unixTime& = Largo(unixTime#,0)
Disponer fileTime#, systemTime#, unixTime#
Volver unixTime&
ENDPROC
Proc FileTimeToReadable
Parámetros fileTime&
Declarar fileTime#, t#, output$
Dim fileTime#,8
Dim 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%)
Disponer t#, fileTime#
Volver output$
ENDPROC
Cls
Imprimir FileTimeToReadable(1715858139)
Imprimir FileTimeToUnixTime("2024-05-16 11:15:39")
Waitkey
End
|
| | | | |
| | Jens-Arne Reumschüssel | Das sieht doch ya correcto bien de!
Se puede natürlich una Quad nehmen, en auch en 15 Jahren todavía esta a ser:
Declarar Quad unixTimeQuad RtlTimeToSecondsSince1970(fileTime#, Addr(unixTimeQuad)) Volver 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 | Gracias! Yo habe deinen Vorschlag con Compiler-Weiche para neuere XProfan Versionen übernommen y mi por el letzte Actualización irreführenden Funktionsnamen geändert. Der Code es en el Original-Contribución. Aufgrund de Performance y Profano2Cpp Kompatibilität hänge Yo meist incluso todavía en XProfan 11 fest. |
| | | | |
| | Jens-Arne Reumschüssel | Yo habe veces una kleine DLL para el Nutzung de QuadInts en XProfan a Versión 11 geschrieben, siehe hier: [...]
Damit debería uno auch para ältere Profano-Versionen Su schönen UnixTime-Code zukunftsfähig hacer puede. Lo se sí überwiegend en Vergleiche de solchen Veces ir, y el kann el 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 | Hier una Versión, el para alte Profane QuadInt.dll nutzt. Das ha auch el Vorteil, dass el Ergebnis no negativo dargestellt se (LongInt es a para letzten Bit ausgenutzt y XProfan nunmal signed), qué a Visualisierung el Sekunden seit el 01.01.1970 no hilfreich es.
$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
Parámetros dateString$
Declarar systemTime#, datePart$, timePart$, fileTime#
Dim systemTime#, SYSTEMTIME
Dim fileTime#,8
datePart$ = Substr$(dateString$,1," ")'Datum
timePart$ = Substr$(dateString$,2," ")'Uhrzeit
systemTime#.y% = Val(Substr$(datePart$,1,"-"))// Jahr
systemTime#.m% = Val(Substr$(datePart$,2,"-"))// Monat
systemTime#.d% = Val(Substr$(datePart$,3,"-"))// Tag
systemTime#.h% = Val(Substr$(timePart$,1,":"))// Stunde
systemTime#.i% = Val(Substr$(timePart$,2,":"))// Minute
systemTime#.s% = Val(Substr$(timePart$,3,":"))// Sekunde
systemTime#.millisecond% = 0// Millisekunde
SystemTimeToFileTime(systemTime#, fileTime#)
$IFDEF VER12.0
Declarar Quad unixTimeQuad
RtlTimeToSecondsSince1970(fileTime#, Addr(unixTimeQuad))
Disponer fileTime#, systemTime#
Volver unixTimeQuad
$ELSE
'Achtung Quadint, el funktioniert sólo a 2038!
Declarar unixTime&, unixTime#
Dim unixTime#,8
RtlTimeToSecondsSince1970(fileTime#,unixTime#)
RtlTimeToSecondsSince1970(fileTime#,QuadAddr(1))
unixTime& = Largo(unixTime#,0)
Disponer fileTime#, systemTime#, unixTime#
Volver unixTime&
$ENDIF
ENDPROC
Proc UnixTime2Date
Parámetros fileTime&
Declarar fileTime#, t#, output$
Dim fileTime#,8
Dim 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%)
Disponer t#, fileTime#
Volver output$
ENDPROC
Cls
Imprimir UnixTime2Date(2504776539)
$IFDEF VER12.0
Imprimir Date2UnixTime("2049-05-16 11:15:39")
$ELSE
InitQuadInt(1)
Date2UnixTime("2049-05-16 11:15:39")
Imprimir QuadGetStr(1)
$ENDIF
WaitKey
End
|
| | | XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 07.07.2024 ▲ |
| |
|
Zum QuelltextThemeninformationenDieses Thema ha 3 subscriber: |