вводить
Питц будетOlson tzБаза данных перенесена в Python. Эта библиотека позволяет выполнять точные межплатформенные вычисления часовых поясов с помощью Python 2.4 или более поздней версии. Это также устраняет проблему неоднозначного времени, когда заканчивается летнее время. Поддерживаются практически все часовые пояса Olson.
Установить
пип установить
pip install pytz
Примеры и использование
Локализованная арифметика времени и даты
>>> from datetime import datetime, timedelta
>>> from pytz import timezone
>>> import pytz
>>> utc = pytz.utc
>>> utc.zone
'UTC'
>>> beijing = timezone('Asia/Shanghai')
>>> beijing.zone
'Asia/Shanghai'
>>> tokyo = timezone('Asia/Tokyo')
>>> tokyo.zone
'Asia/Tokyo'
Библиотека поддерживает два метода построения локализованного времени.
- Первый предоставляется с помощью библиотеки pytz.
localize()метод. Это используется для локализации даты и времени без информации о часовом поясе:
>>> fmt = '%Y-%m-%d %H:%M:%S %Z%z'
>>> loc_dt = beijing.localize(datetime(2018, 10, 27, 6, 0, 0))
>>> print(loc_dt.strftime(fmt))
'2018-10-27 06:00:00 CST+0800'
- Второй способ — использовать стандартный
astimezone()Метод преобразования существующего локализованного времени:
>>> jp_dt = loc_dt.astimezone(tokyo)
>>> jp_dt.strftime(fmt)
'2018-10-27 07:00:00 JST+0900'
Предпочтительный способ обработки времени — всегда работать в формате UTC и преобразовывать его в местное время только при создании вывода для чтения человеком:
>>> utc_dt = datetime(2018, 10, 27, 6, 0, 0, tzinfo=utc)
>>> loc_dt = utc_dt.astimezone(beijing)
>>> loc_dt.strftime(fmt)
'2018-10-27 14:00:00 CST+0800'
Эта библиотека также позволяет выполнять арифметические операции с датами по местному времени, например вычислять разницу во времени между Пекином и Токио:
>>> timestamp = datetime.utcnow()
>>> dt_cn = beijing.localize(timestamp)
>>> dt_jp =tokyo.localize(timestamp)
>>> x = dt_cn - dt_jp
>>> int(x.total_seconds()/3600)
1
разное
UTC
'UTC' этоВсемирное координированное время. Это преемник, но не то же самое, различных определений среднего времени по Гринвичу (GMT) и всемирного времени. UTC теперь является мировым стандартом для регулирования часов и измерения времени. Все другие часовые пояса определяются относительно UTC, включая смещения, такие как UTC+0800 — количество часов, добавляемых или вычитаемых из UTC для получения местного времени. В формате UTC нет перехода на летнее время, что делает его удобным часовым поясом для выполнения арифметических операций с датами, не беспокоясь о путанице и двусмысленности, вызванных переходом на летнее время, сменой часовых поясов в вашей стране или роумингом мобильных компьютеров в нескольких часовых поясах.
летнее время
Переход на летнее время — это практика перевода часов в летнее время, чтобы световой день длился дольше ночью, при этом жертвуя обычным временем восхода солнца. Как правило, регионы, которые используют летнее время, переводят свои часы почти за час до начала и переводят их обратно на стандартное время осенью.
Например, утром последнего воскресенья октября в восточном часовом поясе США происходит следующая последовательность:
- Наступает 01:00 EDT (восточное летнее время).
- 1 час спустя, вместо 2 часов ночи, часы снова возвращаются на 1 час назад, и это снова происходит в 01:00 EST (восточное стандартное время).
>>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc)
>>> eastern = timezone('US/Eastern')
>>> loc_dt = utc_dt.astimezone(eastern)
>>> before = loc_dt - timedelta(minutes=10)
>>> before.strftime(fmt)
'2002-10-27 00:50:00 EST-0500'
>>> eastern.normalize(before).strftime(fmt)
'2002-10-27 01:50:00 EDT-0400'
>>> after = eastern.normalize(before + timedelta(minutes=20))
>>> after.strftime(fmt)
'2002-10-27 01:10:00 EST-0500'
На самом деле каждое мгновение между 01:00 и 02:00 происходит дважды.