2016-06-09 23 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)