使用ADB shell设置日期/时间

时间:2013-10-21 14:12:56

标签: android adb

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

我试过了:

adb shell date -s YYYYMMDD.HHmmss

和unix时间如:

adb shell date 1318349236

任何想法?

11 个答案:

答案 0 :(得分:36)

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

Android设备可能包含toolboxtoybox(或两者)二进制文件,具体取决于版本。您可以通过运行datetoolbox 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"

答案 1 :(得分:27)

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'

答案 2 :(得分:14)

adb shell date -s `date +%G%m%d.%H%M%S`

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

答案 3 :(得分:13)

如果要更改日期值,则必须输入日期值。 “-s”更改SET格式。默认SET格式为“MMDDhhmm [[CC] YY] [.ss]”。

我成功测试了以下命令:

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

答案 4 :(得分:2)

要在 Xperia S 上完成此工作,我必须按如下方式中断命令:

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

动机:我的设备已经恢复到Linux时代的开始,我并不特别担心时间,我只想设置正确的日期 - 顺便说一句,我不能做到这一点系统设置,因为我的自定义MIUI ROM一直崩溃......

答案 5 :(得分:2)

在某些设备上,例如 RTAndroid ,它也可能有效:

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

答案 6 :(得分:1)

扩展@ 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上测试。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

我在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'

此命令不起作用,最初,为了起作用,它本身不起作用。

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

首先,adb shell settings put global auto_time 1

(打开自动日期和时间)

第二,adb shell date '0739010002017.00'

(设置您想要的时间)

第三,adb shell settings put global auto_time 0

(关闭自动日期和时间)

  

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

答案 9 :(得分:0)

使用当前日期的其他答案,我得到以下错误:

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(月份)时,它就可以正常工作了。) / p>

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

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

根据您的时区,这会将时间设置为稍微偏离的值,但是运行该命令后,您可以使用date命令检查您要离开多少小时,并在设置日期命令!

答案 10 :(得分:0)

对于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:55 AM

adb shell date 102902012020.55

如果您不了解日期格式,只需查看以下内容即可:

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

*“年”和“秒”是可选的。