【问题标题】:Why does setting the time from python using timedatectl set UTC time while using the command line sets local time?为什么在使用命令行设置本地时间时使用 timedatectl 从 python 设置时间设置 UTC 时间?
【发布时间】:2020-01-13 19:36:53
【问题描述】:

我正在尝试通过运行 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时是否可能会弄乱时区?

【问题讨论】:

    标签: python linux time timezone


    【解决方案1】:

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

    Django settings.py 文件有

    TIME_ZONE = 'UTC'
    

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

    【讨论】:

      猜你喜欢
      • 2019-10-08
      • 2017-10-10
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      相关资源
      最近更新 更多