1

可能重复:
在 bash 中转换日期格式

我需要转换一个日期,例如

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

像这样

01-06-2012 19:05

理想情况下使用sedawk。我该怎么做呢?

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
  • 打印第一场比赛,空格,第二场比赛
于 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 回答