2016-04-16 6 views
0

私のbashスクリプトは、yyyymmddThhmmssのような日時文字列、例えば20160414T033407を探しています。yyyymmddThhmmssをシェルスクリプトの可変日付時間型に変換するには?

この文字列を、たとえばタイムゾーンを変更できるような日付/時刻形式に変換したいとします。現在、私はこの文字列を厳密に解析しており、時刻に-nを使用してタイムスタンプを現在のタイムゾーンに変換しています。しかし、私は次の日までのローリング時間などを考慮していることがわかります。これに対してよりよいアプローチは何ですか?ありがとう。

答えて

0

sedで分割して、他のツールで理解できるような形式に戻すことができます。

$ echo '20160414T033407' | sed -r 's/([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})([0-9]{2})/\1-\2-\3 \4:\5:\6/' 
2016-04-14 03:34:07 

そして、例えばUnixタイムスタンプ、あなたが好きな形式でそれを取得するには、日付にそれを養う:

$ date --date="$(echo '20160414T033407' | sed -r 's/([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})([0-9]{2})/\1-\2-\3 \4:\5:\6/')" +%s 
1460630047 
1

日は「YYYYMMDDHHMMSS」を許可していませんが、それは「YYYYMMDD HHを行います:MM:SS」、そう:

D="20100101123456" 
date -d "${D:0:8} ${D:8:2}:${D:10:2}:${D:12:2}" 
+0

[サブストリング拡張](https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html)のニース使用しかしでOPの文字列に "T"があります。例えば、yyyymmddThhmmss 20160414T033407あなたの答えはこれに対処していません! – user3439894

+0

これは、使用している 'date'のバージョンによっても異なります。 BSDの 'date'は、出力と同じフィールドを使って入力フォーマットを指定することができます。 – chepner

+0

'D =" 20160414T033407 "; $ {D:11:2}:$ {D:13:2} "$ {D: – Cyrus

関連する問題