Установите дату из оболочки на 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]