如何将日期从数字格式转换为字符串格式?

如何将日期从数字格式转换为字符串格式?

我的输入是[10/04/16 01:02:03 BST]。我怎样才能转换为Apr 10 16 01:02:03?我不想替换/-

答案1

使用 awk:

$ echo '[10/04/16 01:02:03 BST]' | awk -F'[][/: ]' 'BEGIN{split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",m,/ /)} {print m[$3+0],$2,$4,$5":"$6":"$7}'
Apr 10 16 01:02:03

怎么运行的

  • -F'[][/: ]'

    这会将字段分隔符设置为[]/:或空白。

  • BEGIN{split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",m,/ /)}

    m这定义了一个包含月份名称的数组

  • print m[$3+0],$2,$4,$5":"$6":"$7

    这将以新格式打印出日期。

使用反斜杠替代输入

如果输入中有反斜杠,我们可以通过将反斜杠添加到字段分隔符列表中来忽略它们:

$ echo '\[10\/04\/16 01:02:03 BST\]' | awk -F'[][/: \\\\]+' 'BEGIN{split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",m,/ /)} {print m[$3+0],$2,$4,$5":"$6":"$7}'
Apr 10 16 01:02:03

答案2

根据您的版本date(基于 GNU 的系统),这将起到作用。

date -jf '[%d/%m/%y %T BST]' '[10/04/16 01:02:03 BST]' +'%b %d %g %T'

无效的日期或时间(例如无效的日期或无效的月份)会导致错误。因此此操作无效。

date -jf '[%d/%m/%y %T BST]' '[10/13/16 01:02:03 BST]' +'%b %d %g %T'

由于一个月结束后的天数会延伸到下个月,因此会“结束”到 2016 年 3 月 2 日 01:02:03。

date -jf '[%d/%m/%y %T BST]' '[31/02/16 01:02:03 BST]' +'%b %d %g %T'

相关内容