これまでの入力形式をどのように指定しますか?


19

で認識されない形式の日付と時刻が与えられたdate場合、どのようにしdateて日付と時刻を認識することができますか?

例えば:

$ date -d "09SEP2012:23:58:46"
date: invalid date `09SEP2012:23:58:46'
$ date -d "09SEP2012:23:58:46" --magic-option "ddMMMYYY:hh:mm:ss"
Sun Sep  9 23:58:46 MDT 2012

ない--magic-option存在?そうでない場合sed、入力を整形式の日付文字列に変換するのではなく、これを解決するよりエレガントな方法がありますか?


回答:


10

POSIXとGNUのどちらの日付もありません--magic-option。FreeBSDはそれを呼び出します-fdateあなたが提案したものではなく、の出力形式指定子に似た構文を使用)。

あなたの日付は、GNU日付によって認識されることに非常に近いです。必要なのは、日付と時刻をスペースで区切るコロンを置き換えることだけです。

date -d "$(echo "09SEP2012:23:58:46" | sed 's/:/ /')"

1
カスタム形式で?唯一の方法は正規表現ですか?これは恐ろしいです:-(
phil294

1
日付を解析することはできません。日付の形式については、古典的な例があり01/02/03ます。
ジル 'SO-悪であるのをやめる'

5

スクリプトに優しい方法で日付と時刻を処理する一連のツール(dateutils)を作成しました。あなたの魔法のオプションは--input-format|-i、例えばです:

dconv -i '%d%b%Y:%H:%M:%S' "09SEP2012:23:58:46"
=>
  2012-09-09T23:58:46

一方でdconv直接サポートしていませんdate(それは与えないの出力フォーマットをTZ環境中または何か)、ツールがありますstrptimedateutilsサポートして%Z書式指定子が。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.