我想将日期时间字符串保存到time_t,然后将其转换回完全原始的字符串。
但下面的代码会输出"2016-04-25_10:10:05"
通过更改date_str
。
如果您将代码更改为std::string date_str = "1470-04-25_09:10:05";
,
结果会更正。
以下是代码:
#include <iostream>
#include <ctime>
#include <string>
#include <sstream>
#include <iomanip>
int main()
{
// try changing year, hour will be incorrect
std::string date_str = "2016-04-25_09:10:05";
std::tm tm{};
std::istringstream str_stream(date_str);
str_stream >> std::get_time(&tm, "%Y-%m-%d_%T");
std::time_t time = std::mktime(&tm);
std::stringstream stream;
stream << std::put_time(std::localtime(&time), "%F_%T");
std::cout << stream.str() << std::endl;
}
答案 0 :(得分:2)
夏令时(DST)用于节省能源并更好地使用 白天它于1908年首次在加拿大桑德湾使用。
这解释了为什么你在1908年之前(或你的时区采用DST之前的那一年)通过的任何一年都会影响小时。
此外,回答“2016-04-25_10:10:05
”案例中的一小时差距,这是因为您未在tm.tm_isdst
来电之前设置mktime()
:
/* Assuming that all tm memory is set to 0 prior to this */
tm.tm_isdst = -1; /* mktime() will figure out the DST */
std::time_t time = std::mktime(&tm);
tm_isdst的正值或0值将导致mktime()设定 最初,夏令时分别是或不在 效果达到指定时间。 tm_isdst的负值 导致mktime()尝试确定是否夏令时 在指定时间内有效。