时区从UTC转换为新时区

时间:2016-06-09 23:41:39

标签: python timezone timestamp

我在将Python转换为python中的新时区时遇到了一些麻烦。

数据最初是一个字符串,并且成功转换为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'))

请帮我转换时区!谢谢!

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

  

属性错误:(&#34;&#39;美国/中部&#39;对象没有属性&#39;鞋帮&#39;&#34;,u&#39;发生在索引0&#39;)< / p>

central已经是pytz.timezone个对象。不要将其传递给pytz.timezone() - 直接使用它。

目前尚不清楚您的time变量是什么type(time)

如果time是表示Unix时间的浮点数,那么您可以使用以下命令获取给定时区中对应的时区感知日期时间对象:

from datetime import datetime

dt = datetime.fromtimestamp(unix_time, central)

如果time已经是表示UTC时间的timezone-aware日期时间对象,那么将其转换为给定时区:

dt = dt_utc.astimezone(central)

您可以使用tz_convert()方法转换pandas对象,将tz感知数据转换为另一个时区:

ts_utc.tz_convert(central)