python - 为什么在使用命令行设置本地时间时使用 timedatectl 从 python 设置时间设置 UTC 时间?
问题描述
我正在尝试通过运行 shell 脚本在 python 3 上设置系统日期/时间,我将“yyyy-mm-dd hh:mm:ss”形式的日期/时间字符串传递给该脚本。脚本将此字符串传递给 timedatectl 以设置时间。
python 调用如下所示:
os.system('sudo %s/settime.sh "%s"' % (Constants.ScriptDirectory, dt))
在这种情况下,dt 是“2019-09-12 07:00:00”
shell脚本很简单:
#!/bin/bash
timedatectl set-ntp no
timedatectl set-time "$1"
当我记录从 python 调用的实际命令时,我看到了我的期望:
sudo /home/user/dev/web/sh/settime.sh "2019-09-12 07:00:00"
问题是:系统时间已更改,但将其设置为 UTC 时间(即 2019-09-12 07:00:00 UTC),并且运行日期报告的时间超出时区增量。但是,如果我从命令行运行与上述完全相同的命令,则时间将正确设置为本地时区,而不是 UTC。
即使我在 python 中包含一个调用以使用 timedatectl 在调用设置时间之前显式设置时区,也会出现这种差异。
我很困惑。为什么效果会不一样?
作为参考,我正在使用 Django 2.2.3 并运行开发服务器。服务器运行python时是否有可能弄乱时区?
解决方案
我通过间接途径偶然发现了答案。
Django settings.py 文件有
TIME_ZONE = 'UTC'
将值更改为本地时区,或让它动态加载可以解决问题。
推荐阅读
- windows-subsystem-for-linux - 使用 wsl 运行多个命令
- javascript - 使用 JS/TS 从二进制字符串创建和下载 PDF 文件
- c# - 后台启动的任务在第一次遇到等待后未完成/终止
- c# - 每 20 毫秒发送一个音频包
- r - 防止 r-markdown 展开代码/功能
- angular - Chart.js / ng2-charts:悬停时的活动图表元素
- visualvm - 如何从 VisualVM 的 CPU 采样器结果中复制多行?
- javascript - SyntaxError: Unexpected token '/' whilecompileing ejs but works if I remove <% include ./src/myTemplate.ejs%>
- powershell - Powershell 条件
- mysql - 将 int 结果转换为 MySQL 中的字符串选项