とらりもん - 日付のテキスト処理 Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
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桁で書く」
日付のテキスト処理(変換)はめんどくさい。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桁で書く」