std::mktime 边缘情况返回 -1

问题描述

给定这段代码获取日期的时间戳,

std::time_t SecondsSinceEpoch(int year,int month,int day)
{
    std::tm t{};

    t.tm_year = year;
    t.tm_mon = month;
    t.tm_mday = day;
    
    t.tm_year -= 1900;
    --t.tm_mon;
    t.tm_isdst = -1;
    
    return std::mktime(&t);
}

它适用于最近的日期,但是在测试 1970,1,1 时它返回 -1,而我希望它返回 0。我可以为此特定日期添加一个边缘案例来解决问题,但为什么会发生这种情况?

编辑:

诸如 1970-01-10 之类的日期返回 738000,但是在带有 0hr,0s,0mhttps://www.epochconverter.com/ 当地时间,它显示741600。此外,诸如 2000-01-01 之类的日期返回 946645200,并且在网站的当地时间,它还返回 946645200。 1970 年 1 月 10 日足够远,以至于转换的边缘情况不会使时间为负并返回 -1,但时间戳在以后的日期是相等的。这对我来说没有任何意义。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)