我有一台可以双启动 Kali Linux 和 Windows 的机器。我运行测试时的正确当地时间是 11:19 IST(印度标准时间),当然是 05:49 UTC。正如您从该问题的编辑历史记录中看到的,我最初是在几分钟后的 05:58 UTC 发布的。
该date命令得到的时区是正确的,但时间却完全错误。
$ date
Wednesday 19 August 2020 04:49:10 PM IST
Run Code Online (Sandbox Code Playgroud)
正如问题评论中所述,这是 12 小时制,即 24 小时制的 16:49:10。该命令报告的当地时间比date实际时间早了 5 个半小时。
我桌面上 GUI 时钟的时间是 11:19,这是正确的。
大约一分钟前我运行了这个:
$ timedatectl
Local time: Wed 2020-08-19 16:47:50 IST
Universal time: Wed 2020-08-19 11:17:50 UTC
RTC time: Wed 2020-08-19 11:17:51
Time zone: Asia/Kolkata (IST, +0530)
System clock synchronized: no
NTP service: inactive
RTC in local TZ: no
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,时区是正确的,但当地时间却非常错误。有趣的是,如果那里的“世界时间”是 IST 而不是 UTC,那就是对的。
我不明白为什么会发生这种情况。为什么?我如何解决它?
小智 8
只是为了完整性,请确保您的默认时区是正确的(因为它已经说过Asia/Kolkata并且IST您可能看到的是,此步骤很大程度上是多余的):
# dpkg-重新配置 tzdata\n
当然,如果您尚未运行超级用户 shell,请使用sudo或。su
然后使用 ad\xc3\xa6mon 将系统时钟与正确的 UTC 时间同步,该 ad\xc3\xa6mon 从某些 NTP 服务器获取时间(如果尚未安装,请安装ntp 包):
\n# ntpd-qg\n
该-q选项指示ntpd只设置一次时间并退出。\n它不会变成 ad\xc3\xa6mon。\n这种一次性模式相当于ntpd独立ntpdate命令。
该-g选项很重要,原因请参见“使用 NTP 同步时间的推荐方法是什么? ”。\n您的时钟与正确的 UTC 值相差 1000 秒以上。\n相差五个半小时。 \n如果不使用该-g选项,ntpd将简单地拒绝纠正这种情况。
(当然还有其他方法可以将系统时钟重置为正确的 UTC 时间。\n您可以在机器固件的 SETUP 实用程序中手动输入它,甚至可以使用命令手动输入它date。 \nntpd从现在开始,甚至还有其他工具可以用来保持与 NTP 服务器的同步,例如chronydchrony包。)
发生的情况是这样的。\n当您仅运行 Windows 时,您的硬件实时时钟 (RTC) 被 Windows 解释为本地 (IST) 时间。\n您安装了基于 Linux 的操作系统(这适用于超过只是 Kali Linux),但没有解决冲突基于 Linux 的操作系统(实际上是一般的类 Unix 操作系统)和 Windows 之间的冲突。
\nWindows 认为并且仍然毫无疑问地认为您的实时时钟报告的是本地 (IST) 时间。\n通常,基于 Linux 的操作系统认为您的实时时钟报告的是通用 (UTC) 时间。\n实际时钟注意,时钟硬件没有时区寄存器;因此,由每个操作系统决定时钟中的日期和时间寄存器实际代表什么,时钟被理解为在哪个时区运行。
\n这是一个根本性的冲突。你需要修复它。
\n基于 Linux 的操作系统通常会选择以与 Windows 相同的方式解释实时时钟寄存器,但由于多种原因,这是一个糟糕的选择,这将是(并且在 WWW 上到处都是)完整的问答本身。\n更好的选择是让 Windows 和基于 Linux 的操作系统都同意将 RTC 寄存器理解为读取通用时钟 UTC) 日期和时间。
\n您可以通过配置 Windows 来完成此操作;有一个相当广为人知的注册表设置。\n实际上,除了将 RTC 与 UTC 日期和时间同步之外,您实际上不需要在 Linux 端执行任何操作。\n从timedatectl运行它时的输出中可以看到,您已经作为 Asia/Kolkata您的(默认)时区,并且已经将“本地 TZ 中的 RTC”(即“将 RTC 注册为本地,与 Windows 的方式相同”)设置为“否”。
如果在您有机会重新配置并重新启动 Windows 之前,Windows 碰巧将 RTC 重新同步回 IST 值,则您将需要再次同步回 UTC 值。
\n那么为什么你的 GUI 时钟是正确的?\n讽刺的是,这是因为你没有在其或你的桌面设置中配置正确的 IST 时区。\n它向你显示 UTC 时间,或者可能是都柏林/伦敦/里斯本/巴马科/弗里敦/亚穆苏克罗时间,并且因为在您的系统上,操作系统从 RTC 获取的“UTC 时间”实际上是本地IST时间值,如 Windows 所设置的那样,您的显示 UTC 时间的 GUI 时钟恰好看起来正确。
\ntimedatectl这与 报告的“通用时间”具有正确的本地时间日期和时间的原因相同。\n任何报告基于 Linux 的操作系统当前认为是 UTC 的内容实际上都是在报告本地 IST 日期和时间。
所以你需要
\nntpd,在开机时甚至在 Windows 中,在计算机固件的 SETUP 实用程序中手动设置它),并且