1

重複の可能性:
bashで日付形式を変換する

次のような日付を変換する必要があります

2012-06-01T19:05:00+02:00

このようなものに

01-06-2012 19:05

理想的にはsedまたはawkを使用します。どうすればよいですか?

4

3 に答える 3

5

これは、sedやawkを使用せずに実行できます。これは、bash自体が必要な文字列置換のほとんどを実行できるためです。具体的には、次のことを行う必要があります。

  1. Tをスペースに置き換え、
  2. タイムゾーン情報を削除します。

残りの日付の書式設定は、 dateコマンドで処理できます。

$ date_string='2012-06-01T19:05:00+02:00'
$ date_string="${date_string/T/ }"
$ date_string="${date_string/+*/}"
$ date -d "$date_string" '+%d-%m-%Y %H:%M'
01-06-2012 19:05
于 2012-06-02T14:28:21.840 に答える
3
echo "2012-06-01T19:05:00+02:00"|sed 's/\(.*\)T\([0-9]*:[0-9]*\).*/\1 \2/'
2012-06-01 19:05

それが何をするかを説明するために:

  • Tまでのすべてを一致させ、後で\1と呼びます
  • 次の数字に一致し、その後に「:」が続き、その後に任意の数字が続き、そのグループを\2と呼びます。
  • 最初の一致、スペース、2番目の一致を印刷します
于 2012-06-02T14:17:16.887 に答える
2
date -d "$(echo '2012-06-01T19:05:00+02:00' | sed 's/T/ /; s/+.*//')" '+%d-%m-%Y %H:%M'
于 2012-06-02T14:26:15.443 に答える