Zeddicus_tlt
@Zeddicus_tlt
Программист МК, электронщик

Преобразование даты из ISO8601?

Имеется дата в формате "2017-08-01T12:14:41+03:00" нужно перевести ее в такой вид 2017-08-01 15:14:41. Какие библиотеки имеют такое? Смотрел dateutil, не нашел там такого функционала, с помощью нее смог преобразовать дату только к такому формату 2017-08-01 12:14:41+03:00.
  • Вопрос задан
  • 400 просмотров
Решения вопроса 2
zoonman
@zoonman
CEO @ LinuxQuestions.ru
Создайте объект даты/времени
https://docs.python.org/3/library/datetime.html#da...

А потом используем это
pytz.sourceforge.net

>>> from datetime import datetime
>>> from pytz import timezone
>>> dt = datetime.now()
>>> eastern = timezone('US/Eastern')
>>> msk = timezone('Europe/Moscow')
>>> dt
datetime.datetime(2017, 8, 1, 16, 57, 32, 345267)
>>> dt = eastern.localize(dt)
>>> dt
datetime.datetime(2017, 8, 1, 16, 57, 32, 345267, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)
>>> dt.strftime('%c')
'Tue Aug  1 16:57:32 2017'
>>> mskdt = dt.astimezone(msk)
>>> mskdt
datetime.datetime(2017, 8, 2, 0, 57, 32, 345267, tzinfo=<DstTzInfo 'Europe/Moscow' MSK+4:00:00 STD>)
>>> mskdt.strftime('%c')
'Wed Aug  2 00:57:32 2017'


Форматы разобраны здесь https://docs.python.org/3/library/datetime.html#st...

Если захочется прямо по-русски написать, то тогда вот https://docs.python.org/3/library/locale.html#loca...

>>> locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8')
'ru_RU.UTF-8'
>>> mskdt.strftime('%c')
'\xd1\x81\xd1\x80\xd0\xb5\xd0\xb4\xd0\xb0,  2 \xd0\xb0\xd0\xb2\xd0\xb3\xd1\x83\xd1\x81\xd1\x82\xd0\xb0 2017 \xd0\xb3. 00:57:32'
>>> print(mskdt.strftime('%c'))
среда,  2 августа 2017 г. 00:57:32
Ответ написан
Dr_Elvis
@Dr_Elvis
from datetime import datetime
import pytz

date = '2017-08-01T23:14:41+03:00'# Входная дата-время
dateISO = date[:-5]+date[-5:].replace(':','')# Приводим к формату 2017-08-01T23:14:41+0300
utc = datetime.strptime(dateISO, '%Y-%d-%mT%H:%M:%S%z')# Переводим строку в datatime
localFormat = "%Y-%m-%d %H:%M:%S%z"# Формат вывода даты и времени(часовая зона "%z" оставлена для наглядности)
timezones = ['Africa/Abidjan', 'Antarctica/Vostok']# Первая таймзона +00:00, вторая +06:00(что на 3 часа больше, судя по задаче)
print(utc.strftime(localFormat))# Вывод входной даты и времени
for tz in timezones:# Вывод даты и времени в другом часовом поясе
    localDatetime = utc.astimezone(pytz.timezone(tz))
    print(localDatetime.strftime(localFormat))

Вывод:
2017-01-08 23:14:41+0300
2017-01-08 20:14:41+0000
2017-01-09 02:14:41+0600
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Astrohas
@Astrohas
Python/Django Developer
a = "2017-08-01T12:14:41+03:00"
a = a.replace("T", " ").split("+")[0]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы