问题描述
我有一个任务来创建一个函数,该函数会将时间对象(QString类型)转换为std :: chrono ::毫秒。应当处理的格式为
QString("HH:MM:SS DD-MM-YYYY")
至std::chrono::milliseconds
我在Stack Overflow之前和Google的其他来源中搜索了答案。 结果,我编写了此代码及其正确的代码,但是我完全感到困惑。问题是:
- 为什么我必须减去
chronoUserTime - chronoEpochTime
而不是使用chronoUserTime
? - 是否有任何方法可以像Qt样式
addDays
,setTime
等以直接方式进行渗透?
const std::chrono::milliseconds &xml_order_base::converter(QString dateTime)
{
char *dateChar = const_cast<char*>(dateTime.toStdString().c_str());
std::tm ct;
strptime(dateChar,"%Y-%m-%d %H:%M:%s",&ct);
auto chronoUserTime = std::chrono::system_clock::from_time_t(std::mktime(&ct));
std::tm et;
strptime("1970-01-01 00:00:00",&et); //strptime("Thu Jan 1 1970 00:00:00","%a %b %d %Y %H:%M:%s",&et);
auto chronoEpochTime = std::chrono::system_clock::from_time_t(std::mktime(&et));
auto resultInMS = std::chrono::duration_cast<std::chrono::milliseconds>(chronoUserTime -
chronoEpochTime);
return resultInMS;
}
解决方法
为什么我必须减去
chronoUserTime - chronoEpochTime
而不是使用chronoUserTime
?
chronoUserTime
是一个时间点,time_point
。 milliseconds
是持续时间。时间点不是持续时间,反之亦然。为了将时间点转换为持续时间,您需要一个参考时间点,并且这里使用了通用纪元。
将一个time_point
减去另一个time_point
之间的持续时间 -在您的情况下,自时期以来就是milliseconds
。
有没有什么方法可以直接实现这种效果,例如Qt风格的
addDays
,setTime
是的,您可以将duration
添加到time_point
:
my_time_point += my_duration;