【问题标题】:How to convert QString to std::chrono如何将 QString 转换为 std::chrono
【发布时间】:2021-02-03 17:50:42
【问题描述】:

我的任务是创建一个函数,它将时间对象(QString 类型)转换为 std::chrono::milliseconds。应该处理的格式是

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

我之前在这里Stack Overflow 和谷歌的其他来源搜索过答案。 结果,我编写了这段代码,并且它是正确的,但我完全困惑它是如何工作的。问题是:

  • 为什么我必须减去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", "%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;
}

【问题讨论】:

  • 旁注:不要在不需要时抛弃const(很少需要)。改为这样做:const char* dateChar = dateTime.toStdString().c_str();
  • 谢谢,我测试了,const char*确实更好看

标签: c++ qt stl std chrono


【解决方案1】:

为什么我必须减去chronoUserTime - chronoEpochTime 而不是使用chronoUserTime

chronoUserTime 是一个时间点,time_pointmilliseconds 是一个持续时间。时间点不是持续时间,反之亦然。为了将时间点转换为持续时间,您需要一个参考时间点,并且您在此处使用了通用纪元。

从另一个中减去一个time_point 可以得到time_points 之间的持续时间 - 在你的情况下是milliseconds 自纪元以来。

有什么方法可以直接执行此操作,例如 Qt 风格 addDayssetTime

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

my_time_point += my_duration;    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2013-08-21
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多