C ++ std :: string到UTC的time_t

时间:2017-08-15 19:48:13

标签: c++ date timezone

我有一个函数,它接受由日,月和年指定的日期并创建std::time_t,另一个函数接受std::time_t并将其转换为std::string。问题是我正在努力只使用UTC日期。因此,这两个函数不得考虑其他时区。

到目前为止,我已尝试过:

std::time_t get_timestamp(unsigned day, unsigned month, unsigned year)
{
    std::tm t = {};
    t.tm_mday = day;
    t.tm_mon = month - 1;
    t.tm_year = year - 1900;
    t.tm_isdst = 0;

    return std::mktime(&t);
}

std::string get_date(std::time_t const& ts)
{
    std::ostringstream sso;
    sso << std::put_time(gmtime(&ts), "%Y-%m-%d %H:%M %Z");

    return sso.str();
}

std::time_t sample = get_timestamp("2017-06-01");
std::cout << get_date(sample) << std::endl;

但是这段代码打印2017-05-31 23:00 GMT,因为mktime使用当前的区域设置。

如何更改第一个函数定义以获取正确的时间戳?除了booststd之外,我不想使用其他库。

0 个答案:

没有答案