mktime 导致 SLES 15 SP3 溢出

mktime causes overflow in SLES 15 SP3

SLES 15 SP3 使用 glibc 2.31,我们使用 mktime 的转换时间代码因 ulong 溢出而失败。如果我们在这里遗漏了什么,谁能告诉我们。或者我们有任何其他替代系统调用可以做同样的事情吗?

main()
{
    time_t time_since_epoch = 0;
    struct tm gmTimetm; 
    gmTimetm.tm_year = 2022;
    gmTimetm.tm_mon = 02;
    gmTimetm.tm_mday = 24;
    gmTimetm.tm_hour = 11;
    gmTimetm.tm_min = 42;
    gmTimetm.tm_sec = 45;
    time_since_epoch = mktime(&gmTimetm);

    printf("%lu \n", time_since_epoch);
    return 0; 
}

OP: 18446744073709551615

mktime() 失败。它正在返回 -1。

tm_isdst需要设置为-1。这样问题就解决了