如何用Python修改程序的默认时区
摘要
如何修改程序默认时区
由于系统安装时时区可能选择不对,并不是中国的东八区,导致依赖于日期时间函数无法正常使用
找到一个比较简单的方法
程序启动时加一行代码即可
1
|
os.environ[ 'TZ' ] = 'Asia/Shanghai' |
关于datetime时区问题
使用阿里云函数计算功能,基于python3构建函数,在本机通过datetime.now获取当前时间与数据库存储时间对比,获取时间差,可正常运行。
上传到阿里云后运行错误,后检测发现阿里云服务器默认时间为utc时间。解决方法如下。
解决方案
第三方模块
pytz可以很方便的修改时区,但是需要再引入一个模块,所以没用这个。
1
2
3
4
5
6
|
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'] |
直接修改时区
下面转子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 拿到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获取到的时间比较会出现“带时区与不带时区类型不可转换”的错误
直接加减
1
2
3
|
utc_dt = datetime.utcnow() bj_dt = utc_dt + timedelta(hours = 8 ) delta_dt = bj_dt sql_dt |
此方案要求sql的计时时区要固定