Ahoj,
ještě doplním proč to tak je:
>>> tz = pytz.timezone('Europe/Prague')
pytz neví, jaký offset má použít, protože timezone Europe/Prague může
být +1 nebo +2 (letní čas).
Spadne proto do nějakého divného defaultu, který je PMT+0:58:00 STD :)
Teprve když timezonu svážeme s konrétním datumem přes localize, nastaví
pytz správný offset.
Dan
Dne 26.7.2017 v 09:47 Vláďa Macek napsal(a):
Dejte si bacha.
Pekne me dnes pokousaly timezony a to jsem si myslel, ze se vyznam. :-)
Django 1.11 preslo nejak vic na vyuzivani `pytz`, ktere dodava casove
zony s vice informacemi a datetime.replace, ktere jsem do te doby
nespravne pouzival, se mi fakt nevyplatilo...
>>> import datetime
>>> import pytz
>>> tz = pytz.timezone('Europe/Prague')
>>> tz
<DstTzInfo 'Europe/Prague' PMT+0:58:00 STD>
>>> # Strasidelne. :-) To mam nekde chybu, ne...
>>> d_praha_naivni = datetime.datetime(2017, 6, 8, 10, 19, 52)
>>> d_praha_vnuceno_blbe = d_praha_naivni.replace(tzinfo=tz)
>>> d_utc_naivni =
datetime.datetime.strptime('2017-06-08T08:19:52+00:00',
'%Y-%m-%dT%H:%M:%S+00:00')
>>> d_utc_naivni
datetime.datetime(2017, 6, 8, 8, 19, 52)
>>> d_utc_vnuceno_blbe = d_utc_naivni.replace(tzinfo=pytz.utc)
>>> d_utc_vnuceno_blbe
datetime.datetime(2017, 6, 8, 8, 19, 52, tzinfo=<UTC>)
>>> d_praha_vnuceno_blbe == d_utc_vnuceno_blbe
False
>>> # Pritom stejny cas... lepe:
>>> d_praha = tz.localize(d_praha_naivni)
>>> d_praha
datetime.datetime(2017, 6, 8, 10, 19, 52, tzinfo=<DstTzInfo
'Europe/Prague' CEST+2:00:00 DST>)
>>> d_utc = pytz.utc.localize(d_utc_naivni)
>>> d_utc
datetime.datetime(2017, 6, 8, 8, 19, 52, tzinfo=<UTC>)
>>> d_praha == d_utc
True
>>> # Konecne mi to uznal. :-)
>>> d_utc == d_utc_vnuceno_blbe
True
>>> # Vnuceni UTC pomoci replace() zjevne vadi min... :->
_______________________________________________
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python
Visit: http://www.py.cz
_______________________________________________
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python
Visit: http://www.py.cz