Advertisement

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.

全部评论 (0)

还没有任何评论哟~