LINUX.ORG.RU

Какой то косяк с таймзонами

 


0

1
from dateutil.parser import parse as dparse
print (dparse(test).replace(tzinfo=pytz.timezone('Europe/Moscow')), test)

2017-08-24 01:00:00+02:30 20170824010000 +0300
2017-08-24 01:55:00+03:00 20170824015500 +0300
2017-08-24 03:45:00+02:30 20170824034500 +0300
2017-08-24 05:25:00+03:00 20170824052500 +0300
2017-08-24 21:00:00+02:30 20170824210000 +0300
2017-08-24 23:25:00+03:00 20170824232500 +0300

Почему ?


Ответ на: комментарий от i_gnatenko_brain

Для особо непонятливых:

#!/usr/bin/python3.5

from dateutil.parser import parse
import pytz

lists = [
"20170824010000 +0300",
"20170824015500 +0300",
"20170824034500 +0300",
"20170824052500 +0300",
"20170824210000 +0300",
"20170824232500 +0300"
]

for row in lists:
    print (parse(row).replace(tzinfo=pytz.timezone('Europe/Moscow')))

результат

2017-08-24 01:00:00+02:30
2017-08-24 01:55:00+02:30
2017-08-24 03:45:00+02:30
2017-08-24 05:25:00+02:30
2017-08-24 21:00:00+02:30
2017-08-24 23:25:00+02:30

Почему timezone не +03 а 02:30 ?

Jopich1
() автор топика
Ответ на: комментарий от Jopich1

какая-то проблема в pytz, сорцы лень читать. Вот два воркараунда.

In [1]: import pytz

In [2]: from dateutil.parser import parse

In [3]: d = parse("20170824010000 +0300")

In [4]: tz = pytz.timezone('Europe/Moscow')

In [5]: d.astimezone(tz)
Out[5]: datetime.datetime(2017, 8, 24, 1, 0, tzinfo=<DstTzInfo 'Europe/Moscow' MSK+3:00:00 STD>)

In [6]: print(d.astimezone(tz))
2017-08-24 01:00:00+03:00

In [7]: print(tz.normalize(d.replace(tzinfo=tz)))
2017-08-24 01:30:00+03:00
provaton ★★★★★
()
Последнее исправление: provaton (всего исправлений: 1)
Ответ на: комментарий от provaton

Это не проблема pytz, так задумано, потому что смещения часовых поясов могут меняться со временем. d.astimezone(tz) - это не воркароунд, а правильный способ конвертации дат в разных часовых поясах.

hatefu1_dead
()
Последнее исправление: hatefu1_dead (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.