【问题标题】:Set date/time using ADB shell使用 ADB shell 设置日期/时间
【发布时间】:2013-10-30 02:03:54
【问题描述】:

我正在尝试使用 ADB shell 设置日期/时间,但 shell 只返回当前时间。

我试过了:

adb shell date -s YYYYMMDD.HHmmss

和unix时间一样:

adb shell date 1318349236

有什么想法吗?

【问题讨论】:

标签: android adb


【解决方案1】:

为了节省存储空间,Android 像许多其他嵌入式系统一样使用multi-call binaries 来实现其基本的命令行工具,例如date

Android 设备可能包含 toolboxtoybox(或两者)二进制文件,具体取决于版本。您可以通过运行toolbox datetoybox date 命令来检查您的设备上可用的date 工具的实现。然后你可以使用打印出当前日期的那个。例如,对于 Android 6.0+ 设备,它可能如下所示:

$ adb shell toybox date
Mon Jul 31 21:09:28 CDT 2017

$ adb shell toolbox date
date: no such tool

要使用toolbox date 设置日期和时间,请使用YYYYMMDD.HHmmss 格式:

adb shell "su 0 toolbox date -s 20161231.235959"

如果是toybox date,则使用MMDDhhmm[[CC]YY][.ss] 格式:

adb shell "su 0 toybox date 123123592016.59"

【讨论】:

  • 确保你有root
  • 为我工作...今天是 20140222.014100
  • 如果要将日期设置为当前日期,则: adb shell "su 0 date -s `date +%Y%m%d.%H%M%S`"
  • 它可以完美地使用 root 感谢(确保您允许第一个 shell 成为 root,例如在 SuperSU 或 Superuser 应用程序下允许它)。
  • adb shell "su 0 toybox date $(date +%m%d%H%M%Y.%S)" 适合我
【解决方案2】:

Android 6.0 有了新的日期格式:

Default SET format is "MMDDhhmm[[CC]YY][.ss]", that's (2 digits each)
month, day, hour (0-23), and minute. Optionally century, year, and second.

使用-s 设置不再有效。这是更新后的 set 命令:

更新命令示例:

(在 adb shell 中)

date 060910002016.00                              

将导致:

Thu Jun  9 10:00:00 GMT 2016

注意:该命令不会立即在设备上可见,因为它不会触发任何时间更改广播,但会在一分钟内可见。

要解决这个问题,您可以通过这种方式手动附加此广播:

date 060910002016.00 ; am broadcast -a android.intent.action.TIME_SET

使用adb 命令调用它:

adb shell 'date 060910002016.00 ; am broadcast -a android.intent.action.TIME_SET'

【讨论】:

  • -u 表示始终使用 UTC。要在当前时区的上下文中设置时间,只需在 Marshmallow 上使用“日期 060910002016.00”。
  • @tristan2468 -- 谢谢!更正(删除了不需要的 -u)
  • 谢谢@uval,正是我需要的!
  • 我可以确认这适用于基于 Nougat date 081812242017.40 并具有 root 权限的 Android Things devpreview 4.1,否则错误提示 date: cannot set date: Operation not permitted Fri Aug 18 12:24:10 GMT 2017
  • 抱歉,新的日期格式有点奇怪,尤其是当 ISO 格式 YYYY-MM-DD HH:MM:SS 无处不在时。我想知道自 EPOCH 以来他们什么时候开始需要几秒钟......
【解决方案3】:

如果你想改变它,你必须输入日期值。

-s 更改 SET 格式。默认 SET 格式为MMDDhhmm[[CC]YY][.ss]

我成功测试了以下命令:

adb root
adb shell "date `date +%m%d%H%M%Y.%S`"

【讨论】:

  • 谢谢,正是我需要的!
  • 我根据这个做了一个别名,用su 0代替root:alias adb-set-time='adb shell su 0 "date `date +%m%d%H%M%Y.%S`"'
  • 创建了一个函数:function adb-set-time { adb $@ shell su 0 "date `date +%m%d%H%M%Y.%S`"; }。用法:adb-set-timeadb-set-time -e
  • 这应该设置为答案。
  • 日期:无法设置日期:不允许操作
【解决方案4】:
adb shell date -s `date +%G%m%d.%H%M%S`

首先它会获取您机器的当前日期并将其设置在 android 目标上。 这种方法应该适用于 Linux/Mac/Cygwin。

【讨论】:

  • 也试试adb shell date -s "date +'%G%m%d %H:%M:%S'"
【解决方案5】:

为了在我的 Xperia S 上进行这项工作,我必须按如下方式中断命令:

> adb shell
# su -
# date /* see current date */
# date -s YYYYmmdd

动机:我的设备已经恢复到 Linux 时间的开始,我并不特别担心时间,我只想设置正确的日期——顺便说一句,我无法通过系统设置来完成,因为我的自定义 MIUI ROM 不断崩溃...

【讨论】:

    【解决方案6】:

    在像 RTAndroid 这样的一些设备上也许它也可以工作:

    adb shell "su 0 date `date +%m%d%H%M%Y.%S`"
    

    【讨论】:

      【解决方案7】:

      我对 Android 5 没有任何问题,我在命令中找到的大多数没有 su 的答案都有效。

      Android 6 引起了我的注意。 在 Android 6 上,它没有给我错误,只是没有设置正确,它会将其设置回命令之前的状态。当我尝试这个https://stackoverflow.com/a/43481982/3922705 时,我也遇到了/system/bin/sh: su: not found errors 还有这个https://stackoverflow.com/a/19497572/3922705

      在所有的试错环节之后,我想通了。

      这是我使用的日期格式 MMDDhhmm[[CC]YY][.ss]

      adb shell date '0739010002017.00'

      这个命令不起作用,最初,为了工作,它本身不起作用。

      我使用了这 3 个步骤,它对我有用。

      首先,adb shell settings put global auto_time 1

      (开启自动日期和时间)

      第二,adb shell date '0739010002017.00'

      (设置你想要的时间)

      第三,adb shell settings put global auto_time 0

      (关闭自动日期和时间)

      注意:对于我的具体项目,我不能依赖 网络提供和 GPS 提供的时间。这就是为什么我有第三个 命令。这会关闭该功能。

      【讨论】:

        【解决方案8】:

        对于 Android 6+,在模拟器上更改 DateTime:

        第 1 步

        adb root
        

        第 2 步

        adb shell date MMDDhhmm[[CC]YY][.ss]
        

        例如,将日期设置为 Oct[10] 29 02:01:55 2020 - 只需 10/29/2020 02:01:55AM

        adb shell date 102902012020.55
        

        如果你不懂日期格式,看看这个:

        MM = 10
        DD = 29
        hh = 02
        mm = 01
        [[CC]YY] = 2020 (or can be 20)
        [.ss] = 55
        

        *年和秒是可选的。

        【讨论】:

          【解决方案9】:

          扩展@uval 的答案,您可以使用以下内容根据您的 Windows 机器上的时间更新 android 设备上的日期和时间:

          set dateYYYY=%date:~10,4%
          set dateMM=%date:~4,2%
          set dateDD=%date:~7,2%
          set timeHH=%time:~0,2%
          set timeMM=%time:~3,2%
          set timeSS=%time:~6,2%
          
          adb shell su -c date %dateMM%%dateDD%%timeHH%%timeMM%%dateYYYY%.%timeSS%
          adb shell su -c am broadcast -a android.intent.action.TIME_SET
          

          在有根的 Android 6.0 设备和 Windows 10 PC 上测试。

          【讨论】:

            【解决方案10】:

            使用当前日期的其他答案出现以下错误:

            date: bad date '041009502020.23'; Fri Apr 10 09:50:23 CET 2020 != Fri Apr 10 10:50:23 CEST 2020
            

            使用该命令也接受的格式@%s%s 是 UNIX 时间戳):

            date: bad date '041009532020.32'; Sun Apr 10 09:53:32 CET 2020 != Fri Apr 10 10:53:32 CEST 2020
            

            事实证明这与时区有关,特别是它似乎与夏令时有关(因为当我将 04 替换为 03(月份)时,它工作得很好)。

            解决这个问题的方法是像这样指定-u 选项:

            # toybox date -u 041009502020.23                                     
            Fri Apr 10 09:50:23 UTC 2020
            

            根据您的时区,这会将时间设置为稍有偏差的值,但在您运行该命令后,您可以使用date 命令查看您休息了多少小时,并在设定的日期简单地说明这一点命令!

            【讨论】:

              【解决方案11】:

              对我有用的正确格式是yyyyMMddHHmm.ss

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2021-11-06
                • 2014-08-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-07-12
                • 2023-03-24
                相关资源
                最近更新 更多