2016-06-09 56 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時間,那麼你可以使用得到相應的時區感知DateTime對象在給定的時區浮點數:

from datetime import datetime 

dt = datetime.fromtimestamp(unix_time, central) 

如果time已經表示UTC時間,然後一個timezone-aware DateTime對象將其轉換爲一個給定的時區:

dt = dt_utc.astimezone(central) 

可以使用tz_convert()方法來轉換大熊貓對象TZ感知的數據轉換到另一個時區:

ts_utc.tz_convert(central)