在C中使用mktime在1970年之前在Windows上创建unix时间戳

时间:2018-07-21 02:15:55

标签: c unix-timestamp

我要使用c为Visual Studio(最好是1970VS都为GCC之前的日期创建一个unix时间戳。时间戳记应从日期部分创建。据我所知,Visual Studio不支持1970之前的时间,无论它们是32还是64 bit ...

struct tm s_time = {0};
s_time.tm_year = 1940-1900;
s_time.tm_mon = 7 - 1;
s_time.tm_mday = 4;
time_t unix_time = mktime(&s_time);

1 个答案:

答案 0 :(得分:0)

我想出的解决方案如下:

#include <windows.h>

#define WINDOWS_TICK 10000000
#define SEC_TO_UNIX_EPOCH 11644473600LL

int64_t date_to_int(SYSTEMTIME *s){

    FILETIME   f;

    SystemTimeToFileTime( s, &f );

    uint64_t temp_result;

    temp_result = (((uint64_t) f.dwHighDateTime) << 32) + f.dwLowDateTime;

    return (int64_t) ((temp_result/ WINDOWS_TICK) - SEC_TO_UNIX_EPOCH);    
}