Во-первых, время UTC «Ср 27 марта 06:37:40 2019 по Гринвичу» определенно верно, если рассчитывать по «Ср 26 марта 22:37:40 2019 по Гринвичу-08». Как вы думаете, это может быть 5:37?
Объяснение, почему GMT или UTC не включают DST:
Ни время по Гринвичу, ни по Гринвичу никогда не меняются на летнее время.
Тем не менее, некоторые из стран, которые используют GMT, переключаются на другое время
зоны в период их летнего времени. Например, AKDT (Аляска Дневной свет
Время) является одним из часовых поясов GMT-8 во время летнего времени
экономия времени) с 10 марта по 3 ноября 2019 года.
зима, используется AKST (стандартное время Аляски) по Гринвичу-9.
Во-вторых, как уже было указано в другое время ответа QDateTime :: isDaylightTime always returns false if the Qt::TimeSpec is not Qt::LocalTime or Qt::TimeZone
.
Когда вы используете QDateTime::fromString
с информацией о часовом поясе, как в вашем примере кода, timepec правильно установлен на Qt::OffsetFromUTC
. Вы можете создать экземпляр другого объекта QDateTime в то же время, но с TimeSpec в виде Qt :: LocalTime или Qt :: TimeZone. Вы можете, например, преобразовать в местное время с помощью QDateTime :: toLocalTime или либо в Qt :: LocalTime, либо в Qt :: TimeZone с помощью QDateTime :: fromSecsSinceEpoch , который принимает смещения секунд для часового пояса.
См. Пример кода ниже. Я нахожусь в Финляндии, где летнее время начинается 31 марта, поэтому вы можете увидеть разницу по местному времени, когда используется стандартное время и когда используется летнее время:
QDateTime time = QDateTime::fromString("Wed Mar 26 22:37:40 2019 GMT-08");
qDebug()<<"\nLocal time EET:";
QDateTime localTime = time.toLocalTime();
// This works too, here to local time:
//QDateTime localTime = QDateTime::fromSecsSinceEpoch(time.toSecsSinceEpoch());
qDebug()<<localTime.timeSpec();
qDebug()<<localTime.timeZone();
qDebug()<<localTime.timeZoneAbbreviation();
qDebug()<<localTime.toLocalTime().toString();
qDebug()<<localTime.toUTC().toString();
qDebug()<<localTime.isDaylightTime();
time = QDateTime::fromString("Wed Apr 26 22:37:40 2019 GMT-08");
qDebug()<<"\nLocal time EEST:";
localTime = time.toLocalTime();
qDebug()<<localTime.timeSpec();
qDebug()<<localTime.timeZone();
qDebug()<<localTime.timeZoneAbbreviation();
qDebug()<<localTime.toLocalTime().toString();
qDebug()<<localTime.toUTC().toString();
qDebug()<<localTime.isDaylightTime();
Выход:
Local time EET:
Qt::LocalTime
QTimeZone("Europe/Helsinki")
"EET"
"Wed Mar 27 08:37:40 2019"
"Wed Mar 27 06:37:40 2019 GMT"
false
Local time EEST:
Qt::LocalTime
QTimeZone("Europe/Helsinki")
"EEST"
"Sat Apr 27 09:37:40 2019"
"Sat Apr 27 06:37:40 2019 GMT"
true