python处理datetime类型的时区转换

需求:数据库库中的数据是按照UTC时间进行存储 所以取出来显示给用户 需要处理一下时区

关于pytz包:http://pytz.sourceforge.net/

>>>import pytz, datetime
>>>tz0 = pytz.timezone('Europe/Brussels') # 获取比利时时区
    <DstTzInfo 'Europe/Brussels' WET0:00:00 STD>
>>>tz = pytz.timezone('Asia/Shanghai') # 获取上海时区
    <DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>
# 数据库取出的时间 转换成datetime类型
>>>utcdate = datetime.datetime.strptimet('2012-12-12 00:00:00', "%Y-%m-%d %H:%M:%S")
    datetime.datetime(2012, 12, 12, 0, 0)
# replace是增加datetime上的时区属性
>>>utcdate = utcdate.replace(tz0)
    datetime.datetime(2012, 12, 12, 0, 0, tzinfo=<DstTzInfo 'Europe/Brussels' WET0:00:00 STD>)
# 通过astimezone进行时区转换
>>>newdate = utcdate.astimezone(tz)
    datetime.datetime(2012, 12, 12, 8, 0, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)
# 最后把得到的时区转成字符串
>>>newdate.strftime("%Y-%m-%d %H:%M:%S")
    '2012-12-12 08:00:00'

2015年01月15日更新

上述代码中

utcdate.replace(tz0) 如果使用上海时区 会出现6分钟的问题

可以使用

tz0.localize(utcdate) 替代

你可能感兴趣的:(python处理datetime类型的时区转换)