转换为YYYY-MM-DDTHH:MM:SS +/- HH:MM日期为bash

时间:2012-06-02 13:55:57

标签: bash date sed awk

  

可能重复:
  Convert date formats in bash

我需要转换日期,例如

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

这样的事情

01-06-2012 19:05

理想情况下使用 sed awk 。我该怎么做?

3 个答案:

答案 0 :(得分:5)

这可以在不使用sed或awk的情况下完成,因为bash本身可以执行大多数必需的字符串替换。具体来说,您只需要:

  1. 用空格替换 T
  2. 删除您的时区信息。
  3. 其余日期格式可由日期命令处理。

    $ 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
    

答案 1 :(得分:2)

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 :(得分:2)

date -d "$(echo '2012-06-01T19:05:00+02:00' | sed 's/T/ /; s/+.*//')" '+%d-%m-%Y %H:%M'