python中datetime默认的1990年改为_python中datetime时区问题

介绍

使用阿里云函数计算功能,基于python3构建函数,在本机通过datetime.now获取当前时间与数据库存储时间对比,获取时间差,可正常运行。

上传到阿里云后运行错误,后检测发现阿里云服务器默认时间为utc时间。解决方法如下。

解决方案

第三方模块

pytz可以很方便的修改时区,但是需要再引入一个模块,所以没用这个。import pytz

import datetime

tz = pytz.timezone('Asia/Shanghai')

datetime.datetime.now(tz)#获得此时区的当期那时间

#可以通过pytz.timezone('cn')获取中国的所有可用的时区

#['Asia/Shanghai', 'Asia/Harbin', 'Asia/Chongqing', 'Asia/Urumqi', 'Asia/Kashgar']

直接修改时区

下面转子,缪雪峰博客# 拿到UTC时间,并强制设置时区为UTC+0:00:

>>> utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)

>>> print(utc_dt)

2015-05-18 09:05:12.377316+00:00

# astimezone()将转换时区为北京时间:

>>> bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))

>>> print(bj_dt)

2015-05-18 17:05:12.377316+08:00

# astimezone()将转换时区为东京时间:

>>> tokyo_dt = utc_dt.astimezone(timezone(timedelta(hours=9)))

>>> print(tokyo_dt)

2015-05-18 18:05:12.377316+09:00

# astimezone()将bj_dt转换时区为东京时间:

>>> tokyo_dt2 = bj_dt.astimezone(timezone(timedelta(hours=9)))

>>> print(tokyo_dt2)

2015-05-18 18:05:12.377316+09:00

此方法直接获取很容易,包括使用pytz,但是这样获取到的dt类型都是带时区类型,此时直接和sql获取到的时间比较会出现“带时区与不带时区类型不可转换”的错误

直接加减utc_dt = datetime.utcnow()

bj_dt = utc_dt+timedelta(hours=8)

delta_dt = bj_dt - sql_dt

此方案要求sql的计时时区要固定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值