[英]Set date/time using ADB shell
我正在尝试使用 ADB 外壳设置日期/时间,但外壳只返回当前时间。
我试过:
adb shell date -s YYYYMMDD.HHmmss
和 unix 时间,如:
adb shell date 1318349236
有什么想法吗?
为了节省存储空间,与许多其他嵌入式系统一样,Android 使用多调用二进制文件来实现其基本命令行工具,例如date
。
Android 设备可能包含toolbox
或toybox
(或两者)二进制文件,具体取决于版本。 您可以通过运行toolbox date
和toybox 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"
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 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 上测试。
对于 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
*年份和第二个是可选的。
使用当前日期的其他答案,我收到以下错误:
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
的正确格式是yyyyMMddHHmm.ss
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.