我有一个函数,它接受由日,月和年指定的日期并创建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
使用当前的区域设置。
如何更改第一个函数定义以获取正确的时间戳?除了boost
和std
之外,我不想使用其他库。