いまさらdateの達人になる
気象のシミュレーションやデータ解析をしていると,日付の処理をすることが多い。シェルスクリプト,Tcl,Fortranなどで閏年や曜日を計算したり,日時を加算するプログラムを書いて使ってきた。練習問題としては良かったのかもしれないが,どうも車輪の再発明だったようだ。
date
コマンドを使えば,日付処理が楽になることを今更ながら知った。以下はBSD (FreeBSDやmacOS)の場合。
日付のフォーマットの文字解釈(パース)や変換ができる。
$ date -jf %Y%m%d%H%M%S 20160915120000
2016年 9月15日 木曜日 12時00分00秒 JST
オプションのj
は時刻の設定をしないことを,f
は次の文字列が入力フォーマットであることを示す。入力フォーマットについて詳しくはstrftime
のマニュアル参照。%H
までしか必要ないからといって%M%S
を指定せず0000
を入力しないと,現在の分秒が使われる。
$ date -jf %Y%m%d%H 2016091512
2016年 9月15日 木曜日 12時41分33秒 JST
UNIX時間は1970年1月1日00:00:00からの秒数である。出力フォーマットは+
で指定される。
$ date -jf %Y%m%d%H%M%S 20160915120000 +%s
1473908400
日時を一度UNIX時間に変換すれば,加減算ができる。
$ t0=$(date -jf %Y%m%d%H%M%S 20160915120000 +%s)
$ dh=$(expr 6 \* 3600)
$ t=$(expr $t0 + $dh)
$ date -jf %s $t +%Y%m%d%H
2016091518
Linux
Linuxのdate
は-jf
でなく-d
を使い,書式の指定はできない。
$ date -d "2016-09-15 12:00:00+00" # Linux
$ date -d "2016-09-15 12:00:00+00" +%s # Linux
1473908400
$ t0=$(date -d "2016-09-15 12:00:00+00" +%s)
$ dh=$(expr 6 \* 3600)
$ t=$(expr $t0 + $dh)
$ TZ=0 date -d @$t +%Y%m%d%H
2016091518
スクリプトにまとめたもの:
2020-11-30編集
- ``を$()に変更。
- BSDの
date
コマンドであることを記述。 - BSD/Linux date,NCL,Pythonについてのgistを追加。
Author And Source
この問題について(いまさらdateの達人になる), 我々は、より多くの情報をここで見つけました https://qiita.com/tenomoto/items/41e7b5f409465fb80e5c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .