date -fオプション


ドラマ『時をかける少女』(黒島結菜、菊池風磨、竹内涼真)
主人公がタイムリープする時の、「にゅっ」が可愛いです。
ご存知、筒井康隆のSF小説で発表から50年たってもたくさんの人に親しまれている作品で、アニメ化もしていましたね。今回のドラマは、未来の少年側からの視点も描かれていて、いつのまにか3人が幼なじみになっていたところとか、周囲の人たちの記憶を操作するシーンとかも映像化されていて、ストーリーを知っていてもさらに楽しめます。ドラマなので、各話でのタイムリープを利用したハートフルなショートストーリーをはさみつつって感じでしょうか。アニメ映画だと、タイムリープする残り回数がわかったりしてましたが、ドラマの方は、薬の効果が持続している間のようで、ばんばん使ってます。しかも幼なじみに能力のことをばらしてます。

タイムリープの能力ほしいですねえ。もし使えたら、ファミレスとかでステーキ食べ終わったら、注文前に戻って他の料理を食べて、を繰り返して最終的にコーヒー一杯分のお金だけ払って出て行くと思います。あ、そもそもファミレス入る前に戻ればよいですね。
今回はdateコマンドで時をかけてみます。

~$ cat list
20150301
3 days
3 days ago
2 years
2 years ago
2 month
2 month ago
~$ date
2016年  7月 21日 木曜日 01:23:13 JST
~$ date -f list
2015年  3月  1日 日曜日 00:00:00 JST
2016年  7月 24日 日曜日 01:23:24 JST
2016年  7月 18日 月曜日 01:23:24 JST
2018年  7月 21日 土曜日 01:23:24 JST
2014年  7月 21日 月曜日 01:23:24 JST
2016年  9月 21日 水曜日 01:23:24 JST
2016年  5月 21日 土曜日 01:23:24 JST

dateコマンドの-fオプションを使うことで、上のように日付文字列をファイルで指定することができます。
-fオプションと他の書式オプションも併用できます。

~$ date +"%F %T"
2016-07-21 01:24:34
~$ date +"%F %T" -f list
2015-03-01 00:00:00
2016-07-24 01:24:39
2016-07-18 01:24:39
2018-07-21 01:24:39
2014-07-21 01:24:39
2016-09-21 01:24:39
2016-05-21 01:24:39

ファイルではなく、コマンドラインから指定する場合は–dateオプションです。
『時をかける少女』の原作が発表された50年前を表示してみましょう。

~$ date --date "50 years ago"
1966年  7月 21日 木曜日 01:29:15 JST

あれれ、日付って1970年からの経過時間だった気がしますが、どこまで遡れるのでしょうか。
100年前。

~$ date --date "100 years ago"
1916年  7月 21日 金曜日 01:32:02 JCST

表示されました。
150年前。

~$ date --date "150 years ago"
date: `150 years ago' は無効な日付です

ではforを使ってチェックしてみます。

~$ for i in `seq 100 150`;do echo $i years ago >> list2;done
~$ date -f list2
1916年  7月 21日 金曜日 02:07:26 JCST
1915年  7月 21日 水曜日 02:07:26 JCST
1914年  7月 21日 火曜日 02:07:26 JCST
1913年  7月 21日 月曜日 02:07:26 JCST
1912年  7月 21日 日曜日 02:07:26 JCST
1911年  7月 21日 金曜日 02:07:26 JCST
1910年  7月 21日 木曜日 02:07:26 JCST
1909年  7月 21日 水曜日 02:07:26 JCST
1908年  7月 21日 火曜日 02:07:26 JCST
1907年  7月 21日 日曜日 02:07:26 JCST
1906年  7月 21日 土曜日 02:07:26 JCST
1905年  7月 21日 金曜日 02:07:26 JCST
1904年  7月 21日 木曜日 02:07:26 JCST
1903年  7月 21日 火曜日 02:07:26 JCST
1902年  7月 21日 月曜日 02:07:26 JCST
date: `115 years ago' は無効な日付です
date: `116 years ago' は無効な日付です
date: `117 years ago' は無効な日付です
date: `118 years ago' は無効な日付です
date: `119 years ago' は無効な日付です
(省略)

タイムリープの限界は1902年のようです。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA