MKTime返回错误的时间

mktime returning the wrong time

提问人:BlueCannonBall 提问时间:8/2/2022 更新时间:8/2/2022 访问量:153

问:

我有两个函数用于创建日期字符串和解析日期字符串。创建有效,但解析器似乎增加了 5 小时的时间。就上下文而言,我的时区是 EST,比 GMT 晚 5 小时。如何解决这个问题?功能如下:

std::string build_date(time_t rawtime) {
    struct tm* timeinfo = gmtime(&rawtime);
    std::stringstream ss;
    ss.imbue(std::locale(setlocale(LC_ALL, "C")));
    ss << std::put_time(timeinfo, "%a, %d %b %Y %T %Z");
    return ss.str();
}

time_t parse_date(const std::string& date) {
    struct tm timeinfo = {0};
    std::istringstream ss(date);
    ss.imbue(std::locale(setlocale(LC_ALL, "C")));
    ss >> std::get_time(&timeinfo, "%a, %d %b %Y %T %Z");
    return mktime(&timeinfo);
}
C++ C++11 时间 mktime

评论

0赞 lorro 8/2/2022
建议设置适当的区域设置。
2赞 paddy 8/2/2022
mktime是 的倒数,不是localtime gmtime
0赞 Mark Ransom 8/2/2022
我在 std::get_time 的文档中没有看到列出,因此您的时区可能被忽略了。%Z
0赞 BlueCannonBall 8/2/2022
@paddy 那么gmtime的倒数是多少呢?
1赞 paddy 8/2/2022
请参阅为什么 libc 中没有 gmtime 的反函数?

答: 暂无答案