【发布时间】:2019-01-22 22:17:30
【问题描述】:
我正在使用连接到 Android 平板电脑的 Linux 系统。我需要同步日期、时间和时区。我在两者上都运行了软件,并希望将来自 Android 平板电脑的 logcat 消息与 Linux 系统上的日志消息相关联。两者都包含时间戳。
我发现我可以使用这个命令来同步日期和时间。
adb shell date $(date +%s)
但是,这并没有设置 TimeZone。
我可以使用这个命令得到一个数字时区
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 需要一个地区/城市。
adb shell setprop persist.sys.timezone "America/Denver"
如果我理解正确,这允许 android 设置 UTC 偏移量并考虑该时区对夏令时的观察。
目前,我已经在我的 shell 脚本中创建了一个 switch 语句,它将每个指定的偏移量映射到一个地区/城市。这是有问题的,因为我的 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 系统上的软件更改时区时需要重新启动。这在大多数情况下都有效,除非我选择了一个观察(并且恰好正在观察)夏令时的区域/城市,或者没有区域/城市与我给定的偏移量相匹配。
【问题讨论】: