android - 如何在android平板电脑和Linux系统之间同步日期、时间和时区?

标签 android linux shell adb

我正在使用连接到 Android 平板电脑的 Linux 系统。我需要同步日期、时间和时区。我在两者上都运行了软件,并且想将来自 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 需要地区/城市。

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系统上的软件更改时区时需要重启。这在大多数情况下都有效,除非我选择了一个遵守(并且碰巧正在遵守)夏令时的地区/城市,或者没有任何地区/城市与我给出的偏移量相匹配。

最佳答案

通常,任何 *nix 系统上的时区都是通过创建符号链接(symbolic link)/etc/localtime 到/usr/share/zoneinfo/中的一个区域信息文件来设置的。 zoneinfo 中的文件通常命名为 Europe/London,因此命令“readlink/etc/localtime | cut -d/-f5-”可能会为您提供正确的时区值,除非您的系统处理方式不同。如果是这种情况,您可能需要创建/查找一些实用程序,使所选时区与 zoneinfo 数据库中最接近的条目相匹配。

关于android - 如何在android平板电脑和Linux系统之间同步日期、时间和时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54317282/

相关文章:

java - 在 onCreate 方法上插入默认数据库条目

android - JSch - 如何使用 Session 和 UserInfo

android - 从服务使用 : runOnUiThread or AsyncTask or Handler or Post

linux - 使用 git 为所有用户将存储库存储在/opt/中?

linux - 保持主目录与 Linux Box 同步

ruby - "__rvm_do_with_env_before"和 "__rvm_after_cd"执行 "cd"时

linux - 脚本杀死太长的进程

java - getActionBar().setDisplayHomeAsUpEnabled(true), -> java.lang.NullPointerException 无法解决

c++ - 如何在 Linux 中读取/dev/ttyUSB0 设备?

linux - 如何通过绝对路径运行bash脚本?