2010-10-27 20 views
8

construyo un QDateTime de una cadena como esta:Convierte un QDateTime en UTC a hora local del sistema

QDateTime date = QDateTime::fromString("2010-10-25T10:28:58.570Z", "yyyy-MM-ddTHH:mm:ss.zzzZ"); 

sé que es date en UTC porque esa es la forma en que se almacena. Pero cuando quiero mostrar esta fecha al usuario, debe estar en la zona horaria local del usuario. date.toLocalTime() parece prometedor, pero devuelve exactamente la misma fecha!

¿Cómo convierto date a la hora local del sistema para que se muestre al usuario?

Estas son algunas de las fallas más:

#include <QtCore/QCoreApplication> 
#include <QtCore/QDateTime> 
#include <QtCore/QDebug> 

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(); 
} 

Salida:

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" 

Respuesta

17

QDateTime sabe si es UTC o hora local. Por ejemplo:

QDateTime utc = QDateTime::currentDateTimeUtc(); 
QDateTime local = QDateTime::currentDateTime(); 

local.secsTo(utc) // zero; these dates are the same even though I am in GMT-7 

Tenemos que decirle date que se trata de una fecha y hora UTC con date.setTimeSpec(Qt::UTC):

#include <QtCore/QCoreApplication> 
#include <QtCore/QDateTime> 
#include <QtCore/QDebug> 

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(); 
} 

Salida:

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" 

Estoy en GMT-7, por lo esto es correcto.

0

está utilizando QDateTime::toString() no dar resultados que esperaba?

Quizás podría intentar usar un formato diferente con QDateTime::toString(Qt::SystemLocaleLongDate) o QDateTime::toString(Qt::SystemLocaleShortDate).

De lo contrario, me gustaría tratar de utilizar QLocale::dateTimeFormat() para obtener el formato local como QString y luego utilizar esta cadena como el parámetro de formato de QDateTime::toString(), pero no creo que vaya a cambiar nada.

+0

lo probé, no funcionó. ver ediciones para preguntar – andrewrk

Cuestiones relacionadas