Разница Python между часовыми поясами

Мне нужно создать код, который может сообщить мне текущее время в любом городе (как переменную) и распечатать смещение utc между этим временем и utc. У меня уже есть следующий код, который дает текущее время и смещение от часового пояса, но этот часовой пояс не всегда utc. Примечание: названия городов хранятся в текстовом файле, и пользователь должен иметь возможность добавлять и удалять любые города. Я использую tkinter для графического интерфейса.

from datetime import datetime, timedelta
from pytz import timezone
import pytz

def tz():
    utc = pytz.utc
    amsterdam = timezone('Europe/Amsterdam')
    fmt = '%Y-%m-%d %H:%M:%S %Z%z'
    loc_dt = utc.localize(datetime.today())
    tz = loc_dt.astimezone(amsterdam)
    print(tz.strftime(fmt))

Содержимое файла следующее:

Amsterdam
Brasilia
Los Angeles
Abu Dhabi
Tokyo
Singapore

Может кто-нибудь, пожалуйста, помогите мне с простым кодом для этого? заранее спасибо


person FpRoT    schedule 04.05.2015    source источник
comment
Вы говорите, что названия городов хранятся в текстовом файле. Содержит ли этот файл также смещение UTC для каждого города, или вы, как ожидается, сами это сделаете?   -  person Greg Hewgill    schedule 04.05.2015
comment
stackoverflow.com/a/12692910/4007642   -  person Renato Tavares    schedule 04.05.2015
comment
Ожидается, что мы сами разберемся, файл содержит только названия городов.   -  person FpRoT    schedule 04.05.2015
comment
Не могли бы вы показать нам отрывок из имеющегося у вас текстового файла с названиями городов?   -  person mmenschig    schedule 04.05.2015
comment
С чего вы взяли, что произвольные названия городов уникальны в глобальном масштабе? Они не. Пример: Париж, Франция против Парижа, Техас.   -  person Matt Johnson-Pint    schedule 04.05.2015


Ответы (1)


Вы уже используете pytz, поэтому я бы выбрал:

from datetime import datetime
from pytz import timezone, all_timezones

def to_timezone(dt, tz):
  assert dt.tzinfo is not None
  assert tz in all_timezones
  return dt.astimezone(timezone(tz))

print to_timezone(datetime.now(timezone('UTC')), 'Europe/Amsterdam')

Я установил его в UTC по умолчанию, но суть в следующем:

  • иметь не наивное свидание
  • преобразовать его
person Jonathan Adami    schedule 04.05.2015
comment
Я думаю, что смогу работать с этим, спасибо, но еще одна вещь, он по-прежнему печатает CEST+0200, всегда ли это будет CEST или есть способ изменить его на UTC? - person FpRoT; 04.05.2015
comment
зависит от того, что вы хотите, если вы используете эту функцию to_timezone, она будет в часовом поясе, который вы запрашиваете, вы можете использовать ее снова, чтобы иметь ее в utc следующим образом: to_timezone(mycestdt, timezone('UTC')) - person Jonathan Adami; 04.05.2015