как найти время в определенном часовом поясе из любого места - PullRequest
5 голосов
/ 28 января 2010

Мне нужно знать текущее время в CDT, когда мой скрипт Python запущен. Однако этот сценарий будет выполняться в нескольких разных часовых поясах, поэтому простое смещение не будет работать. Мне нужно только решение для Linux, но кроссплатформенное решение было бы идеально.

Ответы [ 3 ]

9 голосов
/ 28 января 2010

pytz или dateutil.tz - это хитрость. В основном это что-то вроде этого:

>>> from pytz import timezone
>>> mytz = timezone('Europe/Paris')
>>> yourtz = timezone('US/Eastern')

>>> from datetime import datetime
>>> now = datetime.now(mytz)
>>> alsonow = now.astimezone(yourtz)

Сложность состоит в том, чтобы выяснить, в каком часовом поясе вы находитесь. Dateutil.tz в этом лучше.

>>> from dateutil.tz import tzlocal, gettz
>>> mytz = tzlocal()
>>> yourtz = gettz('US/Eastern')

Если вам нужны все подробности того, почему часовые пояса являются злыми, они здесь:

http://regebro.wordpress.com/2007/12/18/python-and-time-zones-fighting-the-beast/

http://regebro.wordpress.com/2008/05/10/python-and-time-zones-part-2-the-beast-returns/

http://regebro.wordpress.com/2008/05/13/thanks-for-the-testing-help-conclusions/

4 голосов
/ 28 января 2010

Вы можете использовать time.gmtime() для получения времени по Гринвичу (UTC) с любого компьютера, независимо от часового пояса, тогда вы можете применить свое смещение.

1 голос
/ 28 января 2010

Будет работать простое смещение, вам просто нужно сместить от UTC.

Используя datetime , вы можете получить текущее время utc (gmt) и использовать объекты datetime:

datetime.datetime.utcnow () - Предоставляет время в UTC

datetime.datetime.now () - Предоставляет время на локальной машине

Чтобы получить время CT от любой системы, вам нужно знать смещение времени CT от UTC. Затем для учета перехода на летнее время используйте функцию для получения текущего смещения.

>>> import datetime
>>> utc = datetime.datetime.utcnow()
>>> current_ct_offset = get_current_ct_offset()
>>> ct_datetime = utc + datetime.timedelta(hours=current_ct_offset)

Я мог бы пропустить что-то здесь, но если вы беспокоитесь только об одном часовом поясе и не выполняете обработку имен tz, это довольно просто.

...