У меня есть такая строка:
2019-04-03 05:10:35+03:00
Мне нужно вывести дату следующим образом:
2019-04-03 08:10:35
Мой код:
print(datetime.strptime(str("2019-04-03 05:10:35+03:00"), "%Y-%m-%d %H:%M:%S%z"))
но у меня ошибка:
ValueError: time data '2019-04-03 05:10:35+03:00' does not match format '%Y-%m-%d %H:%M:%S%z'






Проблема в том, что ваша входная строка неправильно отформатирована. %z ожидает строку формата +HHMM или -HHMM; у вас есть лишний :.
Соответственно, вы можете использовать регулярное выражение для его форматирования:
import re
source = '2019-04-03 05:10:35+03:00'
formatted = re.sub(r'([+-])(\d\d):(\d\d)', r'\1\2\3', source)
print(datetime.strptime(formatted, "%Y-%m-%d %H:%M:%S%z").astimezone(timezone.utc).strftime("%Y-%m-%d %H:%M:%S"))
Выход:
2019-04-03 02:10:35
Спасибо за ответ! Как я могу вывести вместо 2019-04-03 05:10:35+03:00 дату вот так 2019-04-03 08:10:35 (плюс-минус часы)
@nesalexy Чтобы уточнить, ваш ожидаемый результат 08:10:35 или 02:10:35? (поскольку +03:00 обычно подразумевает, что данное время равно предстоящий UTC)
Вывод по-прежнему неверный.
@DirtyBit Возможно, я неправильно понял вопрос, тогда ...
@gmds, честно говоря, если мы возьмем такую дату 2019-04-03 05:10:35+03:00 я думал, что нам нужно +3 часа. Например, если наше свидание такое 2019-04-03 05:10:35-03:00 я думал, что нам нужно -3 часа
@nesalexy Если вы скажете, что сейчас время 22:00 UTC + 8, единственный другой обычный способ представить его будет в UTC, что будет 14:00. Другими словами, +03:00 после времени обычно означает часовой пояс по отношению к UTC. То, что вы вместо этого интерпретируете его как смещение хранится в том же фрагменте данных, не является неправильным, но это немного необычно, поэтому было бы хорошо получить некоторую ясность в отношении того, каков ваш фактический вариант использования.
Использование datetime и split() для манипуляции str:
Предположим, что это + часов:
from datetime import datetime, timedelta
dt_1 = "2019-04-03 05:10:35+03:00"
date_ = dt_1.split("+")[0]
time_ = date_.split(" ")[1]
to_add = dt_1.split("+")[1]
d = datetime.strptime(date_, "%Y-%m-%d %H:%M:%S")
t = datetime.strptime(time_, "%H:%M:%S")
d += timedelta(hours=int(to_add.split(":")[0]), minutes=int(to_add.split(":")[1]))
print(d)
ВЫХОД:
2019-04-03 08:10:35
Это будет работать
from datetime import datetime
your_date = datetime.strptime("2019-04-03 05:10:35+03:00", "%Y-%m-%d %H:%M:%S%z")
print(your_date.strftime("%Y-%m-%d %H:%M:%S"))
Обновлено:
У вас есть «+03:00», если вы считаете часовой пояс, если вы хотите добавить это к своему результату, сделайте это следующим образом:
from datetime import datetime
your_date = datetime.strptime("2019-04-03 05:10:35+03:00", "%Y-%m-%d%H:%M:%S%z")
print((your_date + timedelta(0, your_date.tzinfo.utcoffset(your_date).seconds)).strftime("%Y-%m-%d %H:%M:%S"))
Нет, неправильный вывод.
Отредактировал ответ, теперь у него есть обе вещи
Вывод неверный.