[python] Tip: Slusne me dnes pokousaly timezony

Petr Messner petr.messner na gmail.com
Středa Červenec 26 17:58:52 CEST 2017


Zajímavé: https://github.com/stub42/pytz/blob/master/tz/europe

# Czech Republic / Czechia
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Czech 1945 only - Apr 8 2:00s 1:00 S
Rule Czech 1945 only - Nov 18 2:00s 0 -
Rule Czech 1946 only - May 6 2:00s 1:00 S
Rule Czech 1946 1949 - Oct Sun>=1 2:00s 0 -
Rule Czech 1947 only - Apr 20 2:00s 1:00 S
Rule Czech 1948 only - Apr 18 2:00s 1:00 S
Rule Czech 1949 only - Apr 9 2:00s 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Prague 0:57:44 - LMT 1850
0:57:44 - PMT 1891 Oct    # Prague Mean Time
1:00 C-Eur CE%sT 1944 Sep 17  2:00s
1:00 Czech CE%sT 1979
1:00 EU CE%sT
# Use Europe/Prague also for Slovakia.

Takže ten default je asi PMT - Prague Mean Time z roku 1891? :)

PM

Dne 26. července 2017 17:32 Daniel Milde <daniel na milde.cz> napsal(a):

> 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 listpython na py.czhttp://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
>
>
>
> _______________________________________________
> Python mailing list
> python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20170726/533e7e0b/attachment.html>


Další informace o konferenci Python