Установка даты / времени с использованием оболочки ADB

Я пытаюсь установить дату / время с помощью оболочки ADB, но оболочка возвращает текущее время.

Я пробовал:

adb shell date -s YYYYMMDD.HHmmss 

И unix время, как:

 adb shell date 1318349236 

есть идеи?

Чтобы сохранить пространство для хранения данных Android, как и многие другие встроенные системы, использует двоичные файлы с несколькими вызовами для реализации основных инструментов командной строки, таких как date .

Android-устройство может включать в себя либо toolbox либо toybox (или оба) в зависимости от версии. Вы можете проверить, какая toybox date toolbox 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 использования 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)

 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' 

Подробнее об установке времени через ADB

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

Сначала он получает текущую дату вашей машины и устанавливает ее на цель Android. Этот подход должен работать на Linux / Mac / Cygwin.

Вы должны поместить значение даты, если хотите его изменить. «-s» изменяет формат SET. Формат по умолчанию: «MMDDhhmm [[CC] YY] [. Ss]».

Я успешно протестировал следующие команды:

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

Чтобы выполнить эту работу на моем Xperia S , мне пришлось разбить команды следующим образом:

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

Мотив: мое устройство вернулось к началу Linux-времени, и я не особо беспокоился со временем, все, что я хотел, – это установить правильную дату – что, кстати, я не мог сделать с помощью системных настроек, потому что мой пользовательский MIUI ROM Продолжал сбой …

Развернувшись на ответе @ uval, вы можете использовать следующее, чтобы обновить дату и время на устройстве Android в зависимости от времени на вашем компьютере под управлением Windows:

 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.

На некоторых устройствах, таких как RTAndroid, возможно, он работает тоже:

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

Правильный формат, который работал для меня, – yyyyMMddHHmm.ss