Qt4 проблема с форматированием часов в QDateTime
У меня проблема со следующим кодом:
QDateTime test2;
test2.setTime_t(25);
qDebug() << test2.toString("hh:mm:ss");
выводит "01:00:25" для вывода вместо 00:00:25. Почему первый час установлен на 01 вместо 00?
Я подумал, что, возможно, я / PM обозначение используется, поэтому я попробовал это
QDateTime test2;
test2.setTime_t(3600*22+25);
qDebug() << test2.toString("hh:mm:ss");
И все же я получил на выходе
"23:00:25"
Помогите:)
2 ответа
Решение
Это потому, что вы не установили QDateTime в UTC. Итак, 00:00:25 1 января 1970 года в UTC время было, вероятно, 01:00:25 в вашем местном часовом поясе? И твой код говорит "10:00:25" для меня, в UTC+10:)
Попробуй это:
QDateTime test2;
test2.setTimeSpec(Qt::UTC);
test2.setTime_t(25);
qDebug() << test2.toString("hh:mm:ss");
Просто добавлю, похоже UTC с тобой связывается. Проверьте последнюю строку вывода:
#include <QCoreApplication>
#include <QDateTime>
#include <QDebug>
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv );
QDateTime test1;
test1.setTime_t(25);
qDebug() << "Local 1: " << test1.toString("hh:mm:ss");
qDebug() << "Local 1: " << test1.toString();
qDebug() << "UTC 1: " << test1.toUTC().toString();
QDateTime test2;
test2.setDate(QDate(1970,01,01));
test2.setTime(QTime(00,59));
qDebug() << "Local 2: " << test2.toString("hh:mm:ss");
qDebug() << "Local 2: " << test2.toString();
qDebug() << "UTC 2: " << test2.toUTC().toString();
return 0;
}
Выход:
Local 1: "01:00:25"
Local 1: "Thu Jan 1 01:00:25 1970"
UTC 1: "Thu Jan 1 00:00:25 1970"
Local 2: "00:59:00"
Local 2: "Thu Jan 1 00:59:00 1970"
UTC 2: "Wed Dec 31 23:59:00 1969"
PS: я на UTC + 1