如何将 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 的其他来源中搜索过答案。 结果,我写了这段代码,它是正确的,但我完全不明白它是如何工作的。问题是:


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_pointmilliseconds 持续时间 。时间点不是持续时间,反之亦然。为了将时间点转换为持续时间,您需要一个参考时间点,并且您在这里使用了公共纪元。

从另一个中减去一个 time_point 给你 duration 在那些 time_points 之间 - 在你的情况下是 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;