如何知道 Linux 中的硬件时钟设置为本地时间还是 UTC?

如何知道 Linux 中的硬件时钟设置为本地时间还是 UTC?

我有一台双启动的 PC,为了让 Windows 和 Linux 在时间上达成一致,我已将硬件时钟设置为 Linux 中的本地时间,如所述这里

现在我想编写一个脚本来检查我的 Linux 设置是否符合我的要求 - 为此,我需要检查硬件时钟是以本地时间还是 UTC 保存的。但是,即使硬件时钟是 UTC,它hwclock也会给我本地时间的时间。

那么,如何知道 Linux 中的硬件时钟设置为本地时间还是 UTC?

(Linux 是 Crunchbang 11 - Debian 系列,Windows 是 8.1)

答案1

您可以使用或hwclock显示结果。 localtimeutc

只需对每种情况使用相应的标志:

jim@g6:~$ sudo hwclock --localtime
lun 11 ago 2014 03:12:18 CLT  -0.547401 seconds

jim@g6:~$ sudo hwclock --utc
dom 10 ago 2014 23:12:22 CLT  -0.672848 seconds

然后运行date并检查上述哪些结果与的输出相匹配date

答案2

您可以尝试下面的脚本:

#!/bin/bash

curl time.nist.gov:13 2>&1|tee time_nist_gov_13
while cat time_nist_gov_13|grep 'Empty\|denied\|unreachable'
do
 sleep 0.1
 curl time.nist.gov:13 2>&1|tee time_nist_gov_13
done

str=$(cat time_nist_gov_13 | sed '1,3d'|awk  '{print $3}')

hh=$(echo $str|awk -F':' '{print $1}')
mm=$(echo $str|awk -F':' '{print $2}')

a=$(date -u | awk '{print $4 }'| awk -F':' '{print $1}') 
b=$(date -u | awk '{print $4 }'| awk -F':' '{print $2}')

mindiff=$(echo "$b-$mm"|bc)

if [ $mindiff == "-1" ] ; then $mindiff = "1"; 
fi

if [ "$hh" == "$a" ] && ([ "$mm" == "$b" ] || [ "$mindiff" == "1" ])   ; then echo "Your Local time is assigned to UTC";
 else echo "Your Local time is NOT assigned to UTC";
fi

解释如下:脚本获取 UTC+0 时间并将其与date -u当地时间减去以 UTC+0 为参考的时区差异进行比较,如果相同,则表示您的当地时间符合您的时区要求。

它并不总是完美地工作,因为服务器有时可能无法访问,脚本将等待,并且脚本只处理三种错误过滤'Empty\|denied\|unreachable'

因此,一旦您得到“您的本地时间与 UTC 绑定”,就是这样,本地时间与 UTC 绑定,并带有本地时区偏移。

但无论如何,我编写此脚本是为了给出一个想法,如果您需要更认真的想法,请提供更多详细信息。这样任何人都可以看到您对该功能的要求。希望它有所帮助。

相关内容