ADBコマンドを使ってデバイスの日付を変える

すごく苦労したのでメモ。ネットを調べていると「-s」があったみたいだけど今はなくなったのかな?

とりあえずHelpを見る

ヘルプがすごくわかりにくい。。。

$ adb shell date --help
usage: date [-u] [-r FILE] [-d DATE] [+DISPLAY_FORMAT] [-D SET_FORMAT] [SET]

Set/get the current date/time. With no SET shows the current date.

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.
Also accepts "@UNIXTIME[.FRACTION]" as seconds since midnight Jan 1 1970.

-d	Show DATE instead of current time (convert date format)
-D	+FORMAT for SET or -d (instead of MMDDhhmm[[CC]YY][.ss])
-r	Use modification time of FILE instead of current date
-u	Use UTC instead of current timezone

+FORMAT specifies display format string using these escapes:

%% literal %             %n newline              %t tab
%S seconds (00-60)       %M minute (00-59)       %m month (01-12)
%H hour (0-23)           %I hour (01-12)         %p AM/PM
%y short year (00-99)    %Y year                 %C century
%a short weekday name    %A weekday name         %u day of week (1-7, 1=mon)
%b short month name      %B month name           %Z timezone name
%j day of year (001-366) %d day of month (01-31) %e day of month ( 1-31)
%s seconds past the Epoch

%U Week of year (0-53 start sunday)   %W Week of year (0-53 start monday)
%V Week of year (1-53 start monday, week < 4 days not part of this year)

%D = "%m/%d/%y"    %r = "%I : %M : %S %p"   %T = "%H:%M:%S"   %h = "%b"
%x locale date     %X locale time           %c locale date/time

-Dを使うっぽいけどうまくいかない。

$ adb shell date -D “%Y%m%d%H%M” 197805081122 SET
date: bad date '197805081122'; Mon ? 78 05:08:00 JST 1122 != Sun Sep 16 05:08:00 LMT 1123

正解はこれだった(Android 8.x Emulatorでテストした)。

$ adb root
restarting adbd as root
$ adb shell date 050811221978.00
Mon May  8 11:22:00 JST 1978

今日の日付にするならこれ。

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