如何在 android 平板电脑和 Linux 系统之间同步日期、时间和时区?
How to synchronize date, time and time zone between an android tablet and a Linux system?
我正在使用连接到 Android 平板电脑的 Linux 系统。我需要同步日期、时间和时区。我在两者上都有 运行ning 软件,并且想将来自 Android 平板电脑的 logcat 消息与 Linux 系统上的日志消息相关联。两者都包含时间戳。
我发现我可以使用这个命令来同步日期和时间。
adb shell date $(date +%s)
但这并没有设置时区。
我可以使用此命令获得数字时区
date +%z
我的 Linux 系统上的软件使用 UTC 偏移量列表(UTC-0700、UTC+0700 等)和一个指示是否正在观察夏令时的复选框来设置此偏移量。如果是,则偏移量增加一个小时。
更新: 我的 linux 系统上的软件编译自己的 /etc/localtime 文件,其中包含 UTC 偏移量和一些二进制数据。
$ ll /etc/localtime
-rw-r--r--. 1 root root 120 Jan 18 14:06 /etc/localtime
$ date
Wed Jan 23 13:05:37 -07 2019
Android 需要 Region/City.
adb shell setprop persist.sys.timezone "America/Denver"
如果我理解正确,这允许 android 设置 UTC 偏移并考虑到该时区对夏令时的观察。
目前我在 shell 脚本中创建了一个 switch 语句,将每个指定的偏移量映射到 Region/City。这是有问题的,因为我的 linux 系统上的软件提供的一些偏移量在找到的时区列表中不存在 here
adb shell date $(date +%s)
timeZoneOffset=`date +%z`
case "$timeZoneOffset" in
+1400)
timeZone="Pacific/Kiritimati"
;;
...
-1200)
timeZone="Etc/GMT+12"
;;
*)
timeZone="Europe/London"
;;
esac
adb shell setprop persist.sys.timezone $timeZone
此脚本在启动时运行,当Linux系统上的软件更改时区时需要重新启动。这在大多数情况下都有效,除非我选择了一个 Region/City 来观察(并且恰好在观察)夏令时或者没有 Region/City 匹配我给出的偏移量。
通常,任何 *nix 系统上的时区都是通过创建符号链接 /etc/localtime 到 /usr/share/zoneinfo/ 中的一个 zoneinfo 文件来设置的。 zoneinfo 中的文件通常命名为 Europe/London,因此命令 "readlink /etc/localtime | cut -d/ -f5-" 可能会为您提供正确的时区值,除非您的系统处理方式不同。如果是这种情况,您可能需要 make/find 一些可以将所选时区与 zoneinfo 数据库中最接近的条目相匹配的实用程序。
如果您只对日期和时间匹配感兴趣(就像我一样)。您可以将平板电脑的时区设置为 Etc/GMT,然后像这样手动应用 UTC 时差。
adb shell setprop persist.sys.timezone "Etc/GMT"
tz=`date +%z`
sign=${tz:0:1}
hours=${tz:1:2}
minutes=${tz:3:2}
(( offset = (3600 * hours) + (60 * minutes) ))
t=`date +%s`
if [ $sign == "-"]
then
(( t = t - offset ))
else
(( t = t + offset ))
fi
adb shell date $t
时区会出错,但日期和时间会正确。
我正在使用连接到 Android 平板电脑的 Linux 系统。我需要同步日期、时间和时区。我在两者上都有 运行ning 软件,并且想将来自 Android 平板电脑的 logcat 消息与 Linux 系统上的日志消息相关联。两者都包含时间戳。
我发现我可以使用这个命令来同步日期和时间。
adb shell date $(date +%s)
但这并没有设置时区。
我可以使用此命令获得数字时区
date +%z
我的 Linux 系统上的软件使用 UTC 偏移量列表(UTC-0700、UTC+0700 等)和一个指示是否正在观察夏令时的复选框来设置此偏移量。如果是,则偏移量增加一个小时。
更新: 我的 linux 系统上的软件编译自己的 /etc/localtime 文件,其中包含 UTC 偏移量和一些二进制数据。
$ ll /etc/localtime
-rw-r--r--. 1 root root 120 Jan 18 14:06 /etc/localtime
$ date
Wed Jan 23 13:05:37 -07 2019
Android 需要 Region/City.
adb shell setprop persist.sys.timezone "America/Denver"
如果我理解正确,这允许 android 设置 UTC 偏移并考虑到该时区对夏令时的观察。
目前我在 shell 脚本中创建了一个 switch 语句,将每个指定的偏移量映射到 Region/City。这是有问题的,因为我的 linux 系统上的软件提供的一些偏移量在找到的时区列表中不存在 here
adb shell date $(date +%s)
timeZoneOffset=`date +%z`
case "$timeZoneOffset" in
+1400)
timeZone="Pacific/Kiritimati"
;;
...
-1200)
timeZone="Etc/GMT+12"
;;
*)
timeZone="Europe/London"
;;
esac
adb shell setprop persist.sys.timezone $timeZone
此脚本在启动时运行,当Linux系统上的软件更改时区时需要重新启动。这在大多数情况下都有效,除非我选择了一个 Region/City 来观察(并且恰好在观察)夏令时或者没有 Region/City 匹配我给出的偏移量。
通常,任何 *nix 系统上的时区都是通过创建符号链接 /etc/localtime 到 /usr/share/zoneinfo/ 中的一个 zoneinfo 文件来设置的。 zoneinfo 中的文件通常命名为 Europe/London,因此命令 "readlink /etc/localtime | cut -d/ -f5-" 可能会为您提供正确的时区值,除非您的系统处理方式不同。如果是这种情况,您可能需要 make/find 一些可以将所选时区与 zoneinfo 数据库中最接近的条目相匹配的实用程序。
如果您只对日期和时间匹配感兴趣(就像我一样)。您可以将平板电脑的时区设置为 Etc/GMT,然后像这样手动应用 UTC 时差。
adb shell setprop persist.sys.timezone "Etc/GMT"
tz=`date +%z`
sign=${tz:0:1}
hours=${tz:1:2}
minutes=${tz:3:2}
(( offset = (3600 * hours) + (60 * minutes) ))
t=`date +%s`
if [ $sign == "-"]
then
(( t = t - offset ))
else
(( t = t + offset ))
fi
adb shell date $t
时区会出错,但日期和时间会正确。