日付フォーマットが「Sun Apr 23 22:36:20...」とか[18/Feb/2017:22:19:42 +0900]のように月の部分が英語表記になっている機会に出くわすことがよくあるんですが、「Febって何月だっけなー」みたいに悩んでしまう事があります。
そんな時にLinuxのdateコマンドを使って調べる方法です。UbuntuとTiny Core Linuxで試していますが他のLinux上でいけると思います。
英語表記の月名から数字の月を得る
date
コマンドを使えば英語表記の月名から数字の月を得る事ができます。案外とシンプルに書けますので覚えやすいかなと思います。
$ date -d"Apr 1" +%m
04
$ date -d"Feb 1" +%m
02
英語表記の後の「1」は日にちを表していて「Apr 1」は「4月1日」となって%mで月だけ取り出すという感じです。なので「1」の部分は「2」でも「3」でも「7」でも日にちの範囲内なら何でもOKです。
更に短く
ちょっと分かりにくくなりますがスペースは省略可能ですので、更に短く書くことができます。
$ date -dApr1 +%m
04
$ date -dFeb1 +%m
02
日本語環境なら更に更に短くできる(ちょっとコツが必要)
日本語環境なら月は数字で表記されるため+%mを省略しても何となく分かります。年、日、時間を自分の頭の中でフィルターして月だけを見るというコツが必要となりますが…。
$ date -dApr1
2017年 4月 1日 土曜日 00:00:00 JST
$ date -dFeb1
2017年 2月 1日 水曜日 00:00:00 JST
英語表記の部分の大文字小文字は関係ないけど…
英語表記の部分は大文字小文字は関係ありませんが、%mのところを%Mとすると意味が違ってしまうので注意が必要です。%mは月で%Mは時間を表します。
$ date -d"apr 1" +%m
04
$ date -d"feb 1" +%m
02
$ date -d"APR 1" +%m
04
$ date -d"FEB 1" +%m
02
$ date -d"APR 1" +%M
00
$ date -d"FEB 1" +%M
00
念のため全ての月で試してみた
もしかしてという事もあるので全ての月名を試してみました。うん大丈夫そうですね。
$ date -d"Jan 1" +%m
01
$ date -d"Feb 1" +%m
02
$ date -d"Mar 1" +%m
03
$ date -d"Apr 1" +%m
04
$ date -d"May 1" +%m
05
$ date -d"Jun 1" +%m
06
$ date -d"Jul 1" +%m
07
$ date -d"Aug 1" +%m
08
$ date -d"Sep 1" +%m
09
$ date -d"Oct 1" +%m
10
$ date -d"Nov 1" +%m
11
$ date -d"Dec 1" +%m
12
スペースを省略した場合も試してみました。こちらも大丈夫そうです。
$ date -dJan1 +%m
01
$ date -dFeb1 +%m
02
$ date -dMar1 +%m
03
$ date -dApr1 +%m
04
$ date -dMay1 +%m
05
$ date -dJun1 +%m
06
$ date -dJul1 +%m
07
$ date -dAug1 +%m
08
$ date -dSep1 +%m
09
$ date -dOct1 +%m
10
$ date -dNov1 +%m
11
$ date -dDec1 +%m
12
数字の月から英語表記を得る事も可能です
4月を英語表記にするとどうなるんだっけ?という時もdate
コマンドが使えます。考え方は全く同じです。
$ date -d"4/1" +%b
Apr
$ date -d"12/1" +%b
Dec
$ date -d4/1 +%b #ダブルクォートは略してもOK
Apr
$ date -d12/1 +%b #ダブルクォートは略してもOK
Dec
日本環境だと 4月
とか12月
と表示されてしまって意味がない結果となってしまうので、そうゆう場合はLC_ALL=C
を指定することで英語名を取得できます。
$ date -d"4/1" +%b
4月
$ date -d"12/1" +%b
12月
$ LC_ALL=C date -d"4/1" +%b
Apr
$ LC_ALL=C date -d"12/1" +%b
Dec