【问题标题】:UTC Date Time not matching between two machines两台机器之间的 UTC 日期时间不匹配
【发布时间】:2021-11-28 03:20:50
【问题描述】:

我有两个项目,一个是用 JS 编写的,另一个是用 Python 编写的。我有一个功能需要计算来自两个项目的当前 UTC 时差。当我测试当前的 UTC 时间时,我注意到总是存在精确的差异,我希望它几乎相等。

时间差计算是在JS项目中完成的。使用 websocket,我从 Python 项目中获取 UTC 时间并从中减去 Math.round(new Date().getTime())。差异几乎总是相同的,但也是不可接受的。

这就是我从 Python 获取 UTC 时间的方式:

time = datetime.datetime.now(datetime.timezone.utc)
time = time.replace(tzinfo=datetime.timezone.utc)
time = time.timestamp()

我正在我的 Windows WSL 环境中运行 JS 项目。当我从本地 (WSL) docker 容器运行 python 项目时,我得到了 7.02 秒的差异。相反,当我从树莓派上的 LXC 容器运行 python 项目时,我得到了大约 3.04 秒。

我需要让这个差异等于第二个。有什么我可以做的吗?

【问题讨论】:

  • 您是否分别检查了两个环境的系统时间?像这样的差异听起来像是某个地方的时间已经过去了,而不是传输延迟。
  • FWIW,time.replace(tzinfo=datetime.timezone.utc) 完全是多余的;但它应该没有任何影响......
  • 嗨@ChrisG。系统时间实际上是不同的。在 Docker 上是 UTC,在我的 WSL 上,我运行 JS 是 CEST。我假设由于我使用的是 UTC 时间,所以我得到了一个独立于系统时间的通用时间。这是正确的吗?
  • @deceze,谢谢!我会检查一下。但是,是的,我认为它不会产生影响,因为差异仍然很小。编辑:是的,没有效果,但更干净!谢谢!
  • 在两个系统上配置的 timezone 应该是不相关的,正如您所注意到的。重要的是,他们的 时钟 是否相差约 7 秒?

标签: javascript python date datetime utc


【解决方案1】:

我使用 ntpdate 解决了这个问题

我已经安装了这个包apt install ntpdate 并运行了ntpdate -u pool.ntp.org。该命令用于同步系统时钟的作用。我在我的两个系统上都这样做了,我没有遇到不匹配 utc 时间戳的问题。

当然我想知道,当 JS 在和 android 设备上运行时,该系统是否也会同步?我现在假设是的:)

【讨论】:

  • 如果您在服务器上安装 ntp 客户端以确保服务器具有准确的时钟,这不会影响客户端。 Android 设备具有完全独立的时钟,并且仍可能独立于您的服务器而漂移。
  • 是的,我明白了,但我也无法控制 Android 设备并同步时间。 AFAIK 这是我可以做的最好的配置设置,而不应用脏修复。我不赞成从我的 android 设备中获取服务器的时钟,并为我的其他时间计算计算偏移量
  • 确实,您应该尽量不要将任何客户端时间用于任何重要的事情。如果这样做,您基本上需要将服务器的时间发送给客户端,然后总是进行特殊计算,这也很烦人,也不完全正确。
猜你喜欢
  • 2013-07-02
  • 2013-09-19
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 2014-05-22
相关资源
最近更新 更多