Qt QDateTime из строки с часовым поясом и летним временем

Аналогичные результаты с помощью альтернативного стиля могут заключаться в том, чтобы написать функцию, которая выполняет операцию, которую вы хотите в строке, используя синтаксис row['fieldname'] для доступа к отдельным значениям / столбцам, а затем выполнить DataFrame.apply на нем

Это повторяет ответ на вопрос, связанный здесь: pandas создает новый столбец на основе значений из других столбцов

def normalise_row(row):
    if row['Currency'] == '$'
    ...
    ...
    ...
    return result

df['Normalized'] = df.apply(lambda row : normalise_row, axis=1) 

1
задан Awais Rafique 27 March 2019 в 05:57
поделиться

1 ответ

Во-первых, время UTC «Ср 27 марта 06:37:40 2019 по Гринвичу» определенно верно, если рассчитывать по «Ср 26 марта 22:37:40 2019 GMT-08». Как вы думаете, это может быть 5:37?

Объяснение того, почему GMT или UTC не включают DST:

Ни UTC, ни GMT никогда не изменяются для перехода на летнее время (DST). Однако некоторые страны, использующие GMT, переключаются на разные часовые пояса в течение периода DST. Например, AKDT (летнее время Аляски) является одним из часовых поясов GMT-8 во время их летнего времени (летнее летнее время) между 10 марта и 3 ноября 2019 года. Зимой AKST (стандартное время Аляски), которое является GMT-9 используется.

Во-вторых, как уже указывалось в другое время ответа QDateTime :: isDaylightTime always returns false if the Qt::TimeSpec is not Qt::LocalTime or Qt::TimeZone.

Когда вы используете QDateTime::fromString с информацией о часовом поясе, как в примере кода , временная спецификация правильно установлена ​​на 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
0
ответ дан talamaki 27 March 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: