【发布时间】: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 样式
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;
}
【问题讨论】:
-
旁注:不要在不需要时抛弃
const(很少需要)。改为这样做:const char* dateChar = dateTime.toStdString().c_str(); -
谢谢,我测试了,
const char*确实更好看