我正在尝试使用 ADB shell 设置日期/时间,但 shell 只返回当前时间。
我试过了:
adb shell date -s YYYYMMDD.HHmmss
和Unix时间一样:
adb shell date 1318349236
有任何想法吗?
为了节省存储空间,Android 像许多其他嵌入式系统一样使用多调用二进制文件来实现其基本命令行工具,例如date
.
Android 设备可能包含一个toolbox
或toybox
(或两个)二进制文件,具体取决于版本。您可以date
通过运行toolbox date
和toybox 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"
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'
如果你想改变它,你必须输入日期值。
-s
更改 SET 格式。默认 SET 格式为MMDDhhmm[[CC]YY][.ss]
.
我成功测试了以下命令:
adb root
adb shell "date `date +%m%d%H%M%Y.%S`"
adb shell date -s `date +%G%m%d.%H%M%S`
首先,它获取您机器的当前日期并将其设置在 android 目标上。这种方法应该适用于 Linux/Mac/Cygwin。
为了在我的Xperia S上进行这项工作,我必须按如下方式中断命令:
> adb shell
# su -
# date /* see current date */
# date -s YYYYmmdd
动机:我的设备已经恢复到 Linux 时间的开始,我并不特别担心时间,我只想设置正确的日期 - 顺便说一句,我无法通过系统设置来完成,因为我的自定义 MIUI ROM一直崩溃...
在诸如RTAndroid之类的某些设备上,它也许也可以工作:
adb shell "su 0 date `date +%m%d%H%M%Y.%S`"
对于 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
*年和秒是可选的。
我对 Android 5 没有任何问题,我在命令中没有 su 的情况下找到的大多数答案都有效。
Android 6 是引起我注意的一个。在 Android 6 上,它没有给我错误,只是没有设置正确,它会将其设置回命令之前的状态。/system/bin/sh: su: not found errors
当我尝试这个https://stackoverflow.com/a/43481982/3922705
和这个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 提供的时间。这就是为什么我有第三个命令。这会关闭该功能。
扩展@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 上进行了测试。
使用当前日期的其他答案,我收到以下错误:
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
命令查看您关闭了多少小时,并在 set date 命令中简单地说明这一点!
对我有用的正确格式是yyyyMMddHHmm.ss