如何将 QString 转换为 std::chrono
How to convert QString to std::chrono
我有一个任务是制作一个函数,它将时间对象(QString 类型)转换为 std::chrono::milliseconds。应该处理的格式是
QString("HH:MM:SS DD-MM-YYYY")
到 std::chrono::milliseconds
我之前在这里 和 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", "%Y-%m-%d %H:%M:%S", &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;
}
Why do I have to subtract chronoUserTime - chronoEpochTime
instead of using chronoUserTime
?
chronoUserTime
是一个时间点,一个time_point
。 milliseconds
是 持续时间 。时间点不是持续时间,反之亦然。为了将时间点转换为持续时间,您需要一个参考时间点,并且您在这里使用了公共纪元。
从另一个中减去一个 time_point
给你 duration 在那些 time_point
s 之间 - 在你的情况下是 milliseconds
自纪元.
Are there any ways, to perfome this in direct way, like in Qt style addDays
, setTime
是的,您可以将 duration
添加到 time_point
:
my_time_point += my_duration;
我有一个任务是制作一个函数,它将时间对象(QString 类型)转换为 std::chrono::milliseconds。应该处理的格式是
QString("HH:MM:SS DD-MM-YYYY")
到 std::chrono::milliseconds
我之前在这里
- 为什么我必须减去
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", "%Y-%m-%d %H:%M:%S", &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;
}
Why do I have to subtract
chronoUserTime - chronoEpochTime
instead of usingchronoUserTime
?
chronoUserTime
是一个时间点,一个time_point
。 milliseconds
是 持续时间 。时间点不是持续时间,反之亦然。为了将时间点转换为持续时间,您需要一个参考时间点,并且您在这里使用了公共纪元。
从另一个中减去一个 time_point
给你 duration 在那些 time_point
s 之间 - 在你的情况下是 milliseconds
自纪元.
Are there any ways, to perfome this in direct way, like in Qt style
addDays
,setTime
是的,您可以将 duration
添加到 time_point
:
my_time_point += my_duration;