输入:包含日期和可选时间的字符串.不同的表现形式会很好但很必要.字符串是用户提供的,可能会格式错误.例子:
"2004-03-21 12:45:33" (我认为这是默认布局)"2004/03/21 12:45:33" (可选布局)"23.09.2004 04:12:21" (德语格式,可选)"2003-02-11" (时间可能会丢失)所需的输出:纪元以来(1970/01/01 00:00:00)或其他一些定点的秒数.
额外:此外,读取本地系统时间的UTC偏移量会很棒.
假设输入是相关机器上的本地时间.输出需要是UTC.系统只是Linux(需要Debian Lenny和Ubuntu).
我试图使用boost/date_time,但必须承认我无法绕过文档.以下工作无需从系统本地时间转换为UTC:
std::string date = "2000-01-01";
boost::posix_time::ptime ptimedate = boost::posix_time::time_from_string(date);
ptimedate += boost::posix_time::hours(Hardcoded_UTC_Offset);// where to get from?
struct tm = boost::posix_time::to_tm(ptimedate);
int64_t ticks = mktime(&mTmTime);
Run Code Online (Sandbox Code Playgroud)
我认为boost::date_time可以提供所需的UTC偏移,但我不知道如何.
我想将作为字符串 (UTC) 给出的日期时间解析为自epoch以来的秒数。示例(参见EpochConverter):
2019-01-15 10:00:00 -> 1547546400
Run Code Online (Sandbox Code Playgroud)
的简单的解决方案,其也接受在非常相关的问题C ++时间字符串从历元转换为秒那张std::string -> std::tm -> std::time_t使用std::get_time,然后std::mktime:
std::tm tm;
std::stringstream ss("2019-01-15 10:00:00");
ss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
std::time_t epoch = std::mktime(&tm);
// 1547546400 (expected)
// 1547539200 (actual, 2 hours too early)
Run Code Online (Sandbox Code Playgroud)
但std::mktime由于时区的原因,似乎把时间弄乱了。我正在执行来自 的代码UTC+01:00,但我们在那个日期也有 DST,所以它+2在这里。
该tm节目15的hour后场std::get_time。一进门就乱了std::mktime。
同样,该字符串将被解释为UTC时间戳,不应涉及任何时区。但是我想出的所有解决方案似乎都将其解释为本地时间戳并为其添加偏移量。
我对此有一些限制: