繁体   English   中英

使用 ADB shell 设置日期/时间

[英]Set date/time using ADB shell

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

我试过:

adb shell date -s YYYYMMDD.HHmmss

和 unix 时间,如:

adb shell date 1318349236

有什么想法吗?

为了节省存储空间,与许多其他嵌入式系统一样,Android 使用多调用二进制文件来实现其基本命令行工具,例如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"

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM