当我运行命令时,date
它会返回我的当地时间:
qua 22 mar 2023 14:02:33 -03
当我运行命令时,date -u
它会返回伦敦时间(UTC-00)。:
qua 22 mar 2023 17:03:08 UTC
现在,当我运行命令时,hwclock --localtime
它会返回伦敦时间:
2023-03-22 17:04:12.515888-03:00
当我运行命令时,hwclock --utc
它会返回我的当地时间:
2023-03-22 14:05:11.123389-03:00
命令date
显示正确的信息;但是,hwclock --localtime
正在打印 UTC-00(伦敦时间),但它应该打印我的当地时间(UTC-03)...
hwclock -l
应该打印utc-03
(我在哪里);hwclock -u
应打印utc-00
(伦敦)。hwclock
正在打印相反的信息。
如何修复?
答案1
我的系统也和你的类似。但这是正常的。我假设你的硬件时钟设置为 UTC。为此,请检查timedatectl
命令输出的最后一行:
RTC in local TZ: no
表示您的硬件时钟设置为 UTC。
检查man
页面hwclock
:
-l,——本地时间;-u,——utc
指示硬件时钟设置为哪个时间尺度。
硬件时钟可以配置为使用 UTC 或本地时间标度,但时钟本身并未说明使用哪种替代方式。--localtime 或 --utc 选项会将此信息提供给 hwclock 命令。如果您指定了错误的选项(或未指定任何选项并采用错误的默认值),则设置和读取硬件时钟都将不正确。
如果您既未指定 --utc 也未指定 --localtime,则将使用 /etc/adjtime 中记录的最后给定的设置函数(--set、--systohc 或 --adjust)。如果 adjtime 文件不存在,则默认为 UTC。
注意:当硬件时钟保持本地时间时,夏令时变化可能会不一致。请参阅下文“本地时间与 UTC”下的讨论。
我的理解是这样的:
假设当前时间为 17:03世界标准时间。您当前时区的本地时间为 14:03 (UTC-03)。请注意,只有操作系统有时区的概念;硬件时钟对时区一无所知。
现在假设您的硬件时钟(又称实时时钟或 RTC)设置为 UTC(而不是您的本地时间),换句话说,设置为 17:03。顺便说一句,如果您不是与 Windows 双重启动。
该命令hwclock --localtime
表示“将硬件时钟的当前本地时间带给我,假设硬件时钟设置为当地时间“。该命令将假定硬件返回的值(17:03)是当地时间已经它将只打印 17:03。
该命令hwclock --utc
表示“将硬件时钟的当前本地时间带给我,假设硬件时钟设置为世界标准时间“。该命令将假定硬件返回的值(17:03)是世界标准时间它将转换为你的当地时间,并打印 14:03。
重申:
--utc
表示假设硬件时钟设置为 UTC。--localtime
表示假设时钟设置为当地时间。
在所有情况下,hwclock
打印从硬件接收到的时间将其转换为当地时间。由于 UTC 比您所在的时间 +3,因此要打印当地时间必须减去3小时当你告诉它(使用--utc
)时钟设置为 UTC 时。但它显示的是时钟的时间未修改当您告诉它(使用--localtime
)RTC 已设置为本地时间时。
您还可以hwclock
使用--test
或--verbose
选项运行命令来查看更多详细信息。