Как мне преобразовать строку с другим часовым поясом в объект datetime? - PullRequest
3 голосов
/ 09 июля 2011

Я понимаю, как преобразовать строку в объект datetime, но как насчет строки, которая имеет другой часовой пояс?например, "10/07/2011 04:22 CEST"

Ответы [ 2 ]

4 голосов
/ 10 июля 2011

EST может означать два разных часовых пояса: европейское летнее время или восточное стандартное время.Таким образом, строки даты и времени, такие как 08/07/2011 04:22 EST, неоднозначны - не существует надежного способа правильно преобразовать такие строки в дату / время с учетом часового пояса.

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

import dateutil.tz as dtz
import pytz
import datetime as dt
import collections
import random

timezones = collections.defaultdict(list)
for name in pytz.common_timezones:
    timezone = dtz.gettz(name)
    try:
        now = dt.datetime.now(timezone)
    except ValueError:
        # dt.datetime.now(dtz.gettz('Pacific/Apia')) raises ValueError
        continue
    abbrev = now.strftime('%Z')
    timezones[abbrev].append(name) 

date_string, tz_string = '10/07/2011 04:22 CEST'.rsplit(' ', 1)
date = dt.datetime.strptime(date_string, '%m/%d/%Y %H:%M')
print(date)
# 2011-10-07 04:22:00

tz = pytz.timezone(random.choice(timezones[tz_string]))
print(tz)
# Europe/Oslo

date = tz.localize(date)
print(date)
# 2011-10-07 04:22:00+02:00
1 голос
/ 09 июля 2011

Вы должны иметь возможность использовать strptime с% Z в строке формата, но учтите это примечание из документации по Python (http://docs.python.org/library/datetime.html#strftime-strptime-behavior):

"% Z - если tzname () возвращает None,% Z заменяется пустой строкой. В противном случае% Z заменяется возвращаемым значением, которое должно быть строкой. Полный набор поддерживаемых кодов формата варьируется в зависимости от платформы. , потому что Python вызывает функцию strftime () библиотеки платформы C, и вариации платформы являются общими. "

Можете ли вы перевести часовой пояс в форму смещения и использовать вместо него% z?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...