如何将QString转换为std :: chrono

问题描述

我有一个任务来创建一个函数,该函数会将时间对象(QString类型)转换为std :: chrono ::毫秒。应当处理的格式为

QString("HH:MM:SS DD-MM-YYYY")std::chrono::milliseconds

我在Stack Overflow之前和Google的其他来源中搜索了答案。 结果,我编写了此代码及其正确的代码,但是我完全感到困惑。问题是:

  • 为什么我必须减去chronoUserTime - chronoEpochTime而不是使用chronoUserTime
  • 是否有任何方法可以像Qt样式addDayssetTime等以直接方式进行渗透?

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

将一个time_point减去另一个time_point之间的持续时间 -在您的情况下,自时期以来就是milliseconds

有没有什么方法可以直接实现这种效果,例如Qt风格的addDayssetTime

是的,您可以将duration添加到time_point

my_time_point += my_duration;    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...