qt获取当前时区utc,将UTC中的QDateTime转换为本地系统时间
I construct a QDateTime from a string like this:
QDateTime date = QDateTime::fromString("2010-10-25T10:28:58.570Z", "yyyy-MM-ddTHH:mm:ss.zzzZ");
I know that date is in UTC because that is the way it's stored. But when I want to display this date to the user, it should be in the user's local time zone. date.toLocalTime() looks promising, but it returns the exact same date!
How do I convert date to the system's local time to display to the user?
Here are some more failures:
#include
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QDateTime date = QDateTime::fromString("2010-10-25T10:28:58.570Z", "yyyy-MM-ddTHH:mm:ss.zzzZ");
QDateTime local = date.toLocalTime();
qDebug() << "utc: " << date;
qDebug() << "local: " << local.toString();
qDebug() << "hax: " << local.toString(Qt::SystemLocaleLongDate);
return a.exec();
}
Output:
utc: QDateTime("Mon Oct 25 10:28:58 2010")
local: "Mon Oct 25 10:28:58 2010"
hax: "Monday, October 25, 2010 10:28:58 AM"
解决方案
QDateTime knows whether it is UTC or local time. For example:
QDateTime utc = QDateTime::currentDateTimeUtc();
QDateTime local = QDateTime::currentDateTime();
local.secsTo(utc) // zero; these dates are the same even though I am in GMT-7
We need to tell date that it is a UTC date time with date.setTimeSpec(Qt::UTC):
#include
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QDateTime date = QDateTime::fromString("2010-10-25T10:28:58.570Z", "yyyy-MM-ddTHH:mm:ss.zzzZ");
date.setTimeSpec(Qt::UTC);
QDateTime local = date.toLocalTime();
qDebug() << "utc: " << date;
qDebug() << "local: " << local.toString();
qDebug() << "hax: " << local.toString(Qt::SystemLocaleLongDate);
return a.exec();
}
Output:
utc: QDateTime("Mon Oct 25 10:28:58 2010")
local: "Mon Oct 25 03:28:58 2010"
hax: "Monday, October 25, 2010 3:28:58 AM"
I'm in GMT-7, so this is right.
