Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

ISO 8601形式の文字列をdateコマンドで加工する/出力する

時刻同期標準のISO 8601形式で記述された文字列を
dateコマンドでよろしく扱う方法です。

他の時刻構文と同様、"-d"オプションでよろしく判定してくれます。
タイムゾーンは、使用中のシェルの設定が反映されます。
私のはJSTなので、よろしくやってくれます。

……スグレモノですね。

$ date -d "2020-06-10T12:30:55Z"
Wed Jun 10 21:30:55 JST 2020

ちゃんとした構文でないと、スマートさが祟って意図しないタイムゾーンになる可能性があるので注意してください。

$ date -d "2020-06-10T12:30:55"
Wed Jun 10 12:30:55 JST 2020

出力をISO8601とすることも当然可能です。
区切りを値として設定してください。

$ date -d "2020-06-10T12:30:55Z" -Iseconds
2020-06-10T21:30:55+09:00

何らかの事情でUCTにしたい場合、TZ=0と環境設定してあげるだけで済みます。

$ TZ=0 date -d "2020-06-10T12:30:55Z" -Iseconds
2020-06-10T12:30:55+00:00