我正在使用连接到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语句,该语句将每个指定的偏移量映射到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系统上的软件更改时区时需要重新启动。除非我选择的某个区域/城市观察(并且恰好正在观察)夏令时,或者没有一个区域/城市与我给出的偏移量相匹配,否则大多数情况下,这都是可行的。
答案 0 :(得分:0)
通常,通过在/ usr / share / zoneinfo /中的zoneinfo文件之一创建符号链接/ etc / localtime来设置任何* nix系统上的时区。 zoneinfo中的文件通常被命名为Europe / London之类的东西,因此,除非系统上的处理方式有所不同,否则命令“ readlink / etc / localtime | cut -d / -f5-”可能会为您提供正确的时区值。如果是这样,您可能需要制作/查找一些实用程序,该实用程序可以将所选时区与zoneinfo数据库中最接近的条目进行匹配。
答案 1 :(得分:0)
如果您只对日期和时间匹配感兴趣(例如我)。您可以将平板电脑的时区设置为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
时区错误,但日期和时间正确。