とらりもんHOME  Index  Search  Changes  Login

日付のテキスト処理

2012/12/23 奈佐原顕郎

日付のテキスト処理(変換)はめんどくさい。Unixシェルではdateコマンドを使いこなそう!

年/月/日(yyyy/mm/dd)をJulian day (DOY)に変換:

$ date -d "2010/02/03" '+%j'
$ date -d 2010/02/03 +%j
(↑どちらでもよい)
34

Julian day (DOY)を年/月/日(yyyy/mm/dd)に変換(上の逆):

$ date -d "2010/01/01 1day ago 34days" '+%Y/%m/%d'
2010/02/03

ここで1day agoとしているのは, 01/01から「何日後」でDOYを表現すると, 1日分, ずれてしまうのを補正するためである。DOYは34daysの34に該当する。

例: 2003年の全日をループでまわし, yyyy/mm/ddを作る:

$ for i in `seq 1 365`; do date -d "2003/01/01 1day ago ${i}days" '+%Y/%m/%d'; done

0で埋められた(パディング; paddingされた)DOYを作る:

$ seq -w 365
↑ -wオプションをつける! すると, 1 2 3 ... が, 001 002 003 ...になる!
$ echo 2016 1 7 | awk '{printf"%d %02d %02d\n",$1,$2,$3}'
↑ %のあとの0は「0でpaddingする」, そのあとの2は「2桁で書く」
Last modified:2017/01/23 14:09:38
Keyword(s):
References:[とらりもんHOME]