簡體   English   中英

如何將 QString 轉換為 std::chrono

[英]How to convert QString to std::chrono

我有一個任務來創建一個函數,它將時間對象(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;
}

為什么我必須減去chronoUserTime - chronoEpochTime而不是使用chronoUserTime

chronoUserTime是一個時間點,一個time_point milliseconds是一個持續時間 時間點不是持續時間,反之亦然。 為了將時間點轉換為持續時間,您需要一個參考時間點,並且您在這里使用了公共紀元。

從另一個中減去一個time_point為您提供這些time_point s 之間的持續時間- 在您的情況下是自紀元以來的milliseconds

有什么方法可以直接執行此操作,例如 Qt 樣式addDayssetTime

是的,您可以向time_point添加duration

my_time_point += my_duration;    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM