Установите дату из оболочки на Android

Для целей отладки, я хотел бы запустить свое приложение на определенную дату. Конечно, я могу изменить дату вручную на своем эмуляторе, но мне было интересно, есть ли простой способ сделать это из оболочки эмулятора (я знаю, что это невозможно сделать из пользовательского интерфейса).

Ответы

Ответ 1

Передача секунд с момента-эпохи в соответствии с предыдущим ответом не работала на моем экземпляре (эмулятор WinXP Android SDK11 HVGA_1.6). Однако этот конкретный формат работал:

adb shell date -s "yyyymmdd.[[[hh]mm]ss]"

[Отредактировано 6/27/2011: добавлена ​​временная часть синтаксиса.]

Ответ 2

Я работаю с Win 7.

Правильный формат, который работал у меня:

adb shell date -s "YYYYMMDD.hhmmss"

Я видел в других потоках эту команду, что действительно изменило для меня, было установить в настройках- > Дата и время параметры таким образом. (Отмените выбор даты и времени, а также часовой пояс)

Date and time in the emulator

Commands from adb

Ответ 3

Следующее работает в Mac OS X для точного согласования с временем вашего компьютера, а также устанавливает секунды.

Для эмуляторов Android 6/7/8 используйте это:

adb -e shell date $(date +%m%d%H%M%Y.%S)

Для эмуляторов Android 4/5 используйте это:

adb -e shell date -s $(date "+%Y%m%d.%H%M%S")

Например, вы можете использовать сценарий оболочки, чтобы определить, какая версия ОС Android работает, и правильно запустить правильную команду adb:

#!/bin/bash
android_os_version=$(adb -e shell getprop ro.build.version.sdk)
# The adb function will return a string like "23\n". So you must remove the new line
# character from it, otherwise the integer comparison (below) will not work.
# See https://stackoverflow.com/questions/19505227/integer-expression-expected-error-in-shell-script/#48705290
android_os_version="${android_os_version//[$'\t\r\n ']}"

echo "The emulator has android_os_version = $android_os_version"
if [ "$android_os_version" -gt 22 ] ; then
    echo "Android 6.0+ emulator detected."
    adb -e shell date $(date +%m%d%H%M%Y.%S)
else
    echo "Android 2/4/5 emulator detected."
    adb -e shell date -s $(date "+%Y%m%d.%H%M%S")
fi

Примечание 1: -e означает "эмулятор", и он работает надежно, если одновременно подключены и эмулятор, и устройство.

Примечание 2: Первый вариант был найден в результате комментария, сделанного Шивой Кранти Кумаром 9 июня 2016 года. Попытка использовать документацию от adb shell date -? практически невозможно. Это плохо написано и слишком сложно для понимания.

Ответ 4

Это работает для меня под Linux, возможно, потребуется некоторая коррекция для перехода на летнее время:

adb shell date -s $(date +%Y%m%d.%H%M%S)

Ответ 5

В отличие от Linux, есть только два способа установить дату. date задает время, вызывая драйвер устройства dev/alarm.

  • date -s "YYYYMMDD.hhmmss" или
  • date -u "UTC_TIME_MILLI_SECS"

Надеюсь, что это поможет.

Рави Пандит

Ответ 6

Это работает на mac:

adb shell date $(date -j mmddHHMM +%s)

где "mmddHHMM" - это месяц, день, час и минута времени, которое вы хотите установить.

Это вызовет команду "date" в вашем эмуляторе, используя оболочку adb, а затем передайте ей количество секунд с эпохи, чтобы установить время (как рассчитывается путем вызова "date -j..." на вашем локальном mac )

Вы также можете быть более конкретным. Формат с man-страницы для даты (на mac) равен [[[mm]dd]HH]MM[[cc]yy][.ss]