Is there any C++ implementation of 64 bit unix timestamp conversions for 32 bit systems? I need to convert struct tm
to 64 bit integer and vice versa, including leap years, timezones, UTC. Also need it portable, at least for GNU/Linux and Windows.
相关问题
- Sorting 3 numbers without branching [closed]
- How to compile C++ code in GDB?
- Why does const allow implicit conversion of refere
- thread_local variables initialization
- What uses more memory in c++? An 2 ints or 2 funct
Yeah use
stuct tm *_localtime64 ( const __time64_t *timer);
That's if your windows fan.
You need:
The function converting a
struct tm*
to atime_t
ismktime
. You can find many implementations of it, eg. in Glibc and in libvxc'smktime.c
file. You could take the code (assuming it is legal to you, so please respect licenses) and changetime_t
to some 64 bits integer likeint64_t
.The functions doing the other conversions from
time_t
tostruct tm*
arelocaltime
orgmtime
and you could do likewise.However, you might have a more fundamental issue: your 32 bits machine running in the year 2040 should have some way of giving you the current time (as the
time
system call does) appropriately in the 64 bits variant oftime_t
, and that is much harder (it depends upon the kernel and the hardware).You seem to be making the assumption that
time_t
is 32-bits on 32-bit systems, and this may or may not be true.On Windows, starting with Visual Studio 2005 the size of
time_t
is 64-bits, even when you compile for 32-bit Windows.The unfortunate part is that glibc defines it as
long int
, which on 32-bit systems is a 32-bit integer. That means that 32-bit Linux and other 32-bit platforms that are based on gcc/glibc (like Cygwin) will not be able to work with 64-bit timestamps.If your application must run on 32-bit glibc, then you should use your own conversion functions, which could be the same functions in the C library recompiled to use 64-bit timestamps.
If you need source code with a permissive license (BSD), then you can look at these functions in minix3. Here is localtime. The source is hyperlinked, so you can find the others easily.