首页 > 解决方案 > 为什么在使用命令行设置本地时间时使用 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时是否有可能弄乱时区?

标签: pythonlinuxtimetimezone

解决方案


我通过间接途径偶然发现了答案。

Django settings.py 文件有

TIME_ZONE = 'UTC'

将值更改为本地时区,或让它动态加载可以解决问题。


推荐阅读