2016-06-09 7 views
0

У меня возникла проблема с преобразованием UTC в новый часовой пояс в python.Изменение часового пояса От UTC до нового часового пояса

Данные первоначально строка принес и успешно конвертируется в UTC, как например:

df['order delivery time'] = pd.to_datetime(df['order delivery time']) 

Далее я пытаюсь написать функцию, как это:

eastern = pytz.timezone('US/Eastern') 
central = pytz.timezone('US/Central') 
pacific = pytz.timezone('US/Pacific') 

def change_tz(time, region): 
    if region == 'sf': 
     return time.astimezone(pytz.timezone(pacific)) 
    elif region == 'chi': 
     return time.astimezone(pytz.timezone(central)) 
    elif region == 'nyc': 
     return time.astimezone(pytz.timezone(eastern)) 

Затем нанесите:

df['order delivery time ADJUSTED'] = df.apply(lambda row: change_tz(row['order delivery time'], row['region']), axis=1) 

Я получаю эту ошибку:

AttributeError: ("'US/Central' object has no attribute 'upper'", u'occurred at index 0') 

Я также попытался строк вроде:

if region == 'sf': 
     return datetime.fromtimestamp(time, tz='US/Pacific') 

И:

if region == 'sf': 
     return tz.fromutc(datetime.utcfromtimestamp(time).replace(tzinfo='US/Pacific')) 

Пожалуйста, помогите мне преобразовать часовой пояс! Благодаря!

ответ

0

Я имел успех, используя pytz и dateutil.parser в прошлом:

import pytz 
import dateutil.parser 

date_needed = dateutil.parser.parse(request.POST.get("date_needed")) 
item.date_needed = pytz.timezone("America/Phoenix").localize(date_needed, is_dst=None) 
0

AttributeError: ("'US/Central' object has no attribute 'upper'", u'occurred at index 0')

central уже pytz.timezone объект. Не передавайте его до pytz.timezone(). Используйте его непосредственно.

Неясно, какая переменная time в вашем случае (type(time)).

Если time это число с плавающей точкой, представляющий Unix времени, то вы можете получить соответствующий часовой пояс-Aware объект DATETIME в данном часовом поясе с помощью:

from datetime import datetime 

dt = datetime.fromtimestamp(unix_time, central) 

Если time уже объект timezone-aware даты и времени времени в UTC представляя то чтобы преобразовать его в данном часовом поясе:

dt = dt_utc.astimezone(central) 

Вы можете использовать метод tz_convert() для преобразования объектов панд конвертировать TZ-зависимые данные в другой временной зоне:

ts_utc.tz_convert(central) 
Смежные вопросы