64-bit unix-timestamp-Konvertierung
Gibt es eine C++ Implementierung von 64-bit unix-timestamp /Zeitstempel-Konvertierungen für 32 bit Systeme? Ich brauche zum konvertieren struct tm
zu 64-bit-integer und Umgekehrt, einschließlich Schaltjahre, Zeitzonen, UTC. Auch müssen es tragbar, zumindest für GNU/Linux und Windows.
InformationsquelleAutor der Frage Adam Trhon | 2011-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Benötigen Sie:
InformationsquelleAutor der Antwort Alexei Khlebnikov
Die Funktion konvertieren eines
struct tm*
zu einemtime_t
istmktime
. Sie finden viele Implementationen, zB. in Glibc und in libvxcmktime.c
- Datei. Man könnte den code nehmen (vorausgesetzt, es ist legal, also bitte Respekt-Lizenzen), und ändern Sietime_t
einige 64-bit integer wieint64_t
.Den Funktionen tun die anderen Konvertierungen von
time_t
zustruct tm*
sindlocaltime
odergmtime
- und Sie könnten dies ebenfalls tun.Jedoch Sie haben eine mehr grundsätzliche Frage: Ihre 32-bit-Computer ausgeführt werden, im Jahr 2040 sollen die Möglichkeit haben, geben Sie die aktuelle Zeit (als die
time
system call macht) angemessen in der 64 bit-Variante vontime_t
und das ist viel schwieriger (es hängt davon ab, den kernel und die hardware).InformationsquelleAutor der Antwort Basile Starynkevitch
Sie zu sein scheinen, die Annahme, dass
time_t
ist 32-bit auf 32-bit-Systeme, und dies kann oder kann nicht wahr sein.Unter Windows, beginnend mit Visual Studio 2005 die Größe der
time_t
ist 64-bit, auch wenn Sie kompilieren für 32-bit-Windows.Der unglückliche Teil ist, dass glibc definiert es als
long int
die auf 32-bit-Systemen ein 32-bit-Ganzzahl. Das bedeutet, dass 32-bit-Linux und andere 32-bit-Plattformen, basierend auf gcc/glibc (wie Cygwin) nicht in der Lage sein zu arbeiten mit 64-bit-Zeitstempel.Wenn Ihre Anwendung muss laufen auf 32-bit-glibc, dann sollten Sie Ihre eigenen Funktionen für die Konvertierung, die die gleichen Funktionen in der C-Bibliothek neu kompiliert für die Verwendung von 64-bit-Zeitstempel.
Wenn Sie brauchen, source-code mit einem permissive license (BSD), dann kann man sich diese Funktionen in minix3. Hier ist localtime. Die Quelle ist verlinkt, so können Sie finden, die anderen zu leicht.
InformationsquelleAutor der Antwort Miguel
Yeah verwenden
stuct tm *_localtime64 ( const __time64_t *timer);
Dass, wenn Sie Ihre windows-fan.
InformationsquelleAutor der Antwort Alex Force