python时区、时间问题

这次遇到一个问题:
在crontab中设定python脚本的在5点执行,然后代码会在5点正确执行,但是获取时间时,总是取到8个小时之前的时间。

然后我做了以下尝试:

  1. 直接执行python脚本,或者使用交互式命令行的时候,python的时区是正确的。但是在crontab中执行的时候,总是取到utc时间,而不是东八区。
  2. 在crontab中直接用shell命令 date -R 打印日期,发现是正确的时间
  3. 在python交互式命令行中,os.environ['TZ']可以看到是Asia/Shanghai,而在crontab中,会报错:找不到这个环境变量

综上可知,crontab的时间和时区没有问题,而crontab执行python脚本时,时区有问题。也就是说crontab的环境变量和系统的环境变量不一致。这样会导致在parse “2018-05-16”这样的字符串转成时间戳的时候,和东八区的时间戳差8个小时(因为parse时使用的时区的是utc)。

解决方案:
python(3.5,linux系统)在判断本地时区的时候,会读一个叫TZ的环境变量。如果你确定自己的crontab时间和系统时间一致,那么在crontab执行python脚本,改为先执行shell脚本,shell脚本的第一个命令是设置一下这个环境变量:

export TZ=Asia/Shanghai

第一个命令是执行你的python脚本

/usr/bin/python3 /home/webadmin/liuhuanyu/test/Test.py

这样python的时区就没问题了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容