微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。