【发布时间】:2016-07-21 00:48:22
【问题描述】:
如何将System::Datetime 转换为QDateTime?
【问题讨论】:
-
您可能想从另一个问题中查看this question 和this answer。
-
QDateTime Conversion的可能重复
如何将System::Datetime 转换为QDateTime?
【问题讨论】:
也许这是一种直截了当的方法,但也很容易被低估:
a) 使用 DateTime.ToString() 将 System::Datetime 转换为字符串
b) 使用 QDateTime::fromString() 将字符串转换为 QDateTime
或者考虑使用QDateTime::fromTime_t()(参见Datetime to time_t conversion的例子)
【讨论】:
使用 Win32 API
#define WINDOWS_TICKS_PER_SEC 10000000
#define EPOCH_DIFFERENCE 11644473600LL
QDatetime getQDatetime(){
FILETIME ft = {0};
::GetSystemTimeAsFileTime(&ft); //Retrieves the current system date and time.
LARGE_INTEGER li = {0};
li.LowPart = ft.dwLowDateTime;
li.HighPart = ft.dwHighDateTime;
long long int hns = li.QuadPart;
wprintf(L"Windows API time: %lli\n", hns);
long long int utm ;
utm=(hns / WINDOWS_TICKS_PER_SEC - EPOCH_DIFFERENCE);
wprintf(L"Unix time: %lli\n", utm);
return QDateTime::fromTime_t(utm);
}
【讨论】:
您可以使用 ISO 8601 规范作为中间格式:
/* not tested */
System::DateTime date;
QString str(date.ToString("O")); // "O" for ISO format
QDateTime qdt = QDateTime::fromString(str, Qt::ISODate);
请参阅 QDateTime::fromString 和 DateTime::ToString 文档
【讨论】:
QDateTime::fromString(QString::fromStdWString(msclr::interop::marshal_as<std::wstring>(systemDateTime.ToString("ddMMyyyy HH:mm:ss"))), "ddMMyyyy HH:mm:ss"))
【讨论】: