- blogs:
- cles::blog
2014/06/07

date コマンドで iso8601 を扱う


Linux の date コマンドは --iso-8601=seconds というオプションをつけると ISO 8601 形式で日付の出力ができますが、この形式を -d オプションに入力するとエラーになるという変な挙動を見つけてしまったのでメモ。
自分が出力できる ISO 8601 形式を自分でパースできないというのはとても滑稽なのですが、date: invalid date といわれてしまうので仕方ありません。ちなみにタイムゾーンを外したり、日付と時刻の区切りの "T" を削除したりと、ちょっと日付をいじってやるとちゃんとパース可能になるという謎仕様。ちなみに CentOS 6/ SL 6 の coreutils (date は coreutils に含まれています)*1*2 のバージョンは 8.4 でした。
$ date -d "2014-06-06T16:21:42Z" --iso-8601=seconds
date: invalid date `2014-06-06T16:21:42Z'
$ date -d "2014-06-06 16:21:42Z" --iso-8601=seconds
2014-06-07T01:21:42+0900
$ date -d "2014-06-06T16:21:42" --iso-8601=seconds
2014-06-06T18:21:42+0900
$ date --version
date (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
作者 David MacKenzie.
さすがにちょっとこの挙動は・・・と思ったのですが、もう少し調べてみると 8.13 (2011-09-08) からはさすがに直っているみたいです。
coreutils.git - GNU coreutils
date now accepts ISO 8601 date-time strings with "T" as the separator. It has long parsed dates like "2004-02-29 16:21:42" with a space between the date and time strings. Now it also parses "2004-02-29T16:21:42" and fractional-second and time-zone-annotated variants like "2004-02-29T16:21:42.333-07:00"
仕方が無いので sed で T を置換するという関数を作ってしのぐことにしようと思います。
date_conv(){ date -d "`echo $1 | sed 's/T/ /'`" --iso-8601=seconds ; }
いちおう僕の意図通りには動きました。
$ date_conv "2014-06-6T16:21:42Z"
2014-06-07T01:21:42+0900
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/6773
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(114423)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(112946)
3 . 年次の人間ドックへ(112372)
4 . 2023 年分の確定申告完了!(1つめ)(111941)
5 . 三菱鉛筆がラミーを買収(111815)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(112946)
3 . 年次の人間ドックへ(112372)
4 . 2023 年分の確定申告完了!(1つめ)(111941)
5 . 三菱鉛筆がラミーを買収(111815)
cles::blogについて
Referrers