【问题标题】:Convert MM-DD-YY MM:SS to YY-MM-DD MM:SS将 MM-DD-YY MM:SS 转换为 YY-MM-DD MM:SS
【发布时间】:2012-01-27 07:37:17
【问题描述】:

我想转换一个日期

12-24-11 13:37

(MM-DD-YY MM:SS) 到

11-12-24 13:37

(YY-MM-DD MM:SS)

有没有办法做到这一点?

【问题讨论】:

    标签: shell unix date


    【解决方案1】:

    sed 来救援:

    $ echo 12-24-11 13:37 | sed 's#^\([0-9\-]\{5\}\)-\([0-9]\{2\}\)#\2-\1#'
    11-12-24 13:37
    

    【讨论】:

      【解决方案2】:

      【讨论】:

      • afaik, date 可以只打印当前日期,或设置一个新日期。 OP 希望格式化现有日期。
      • @phihag 如果 OP 使用日期,他对日期的调用要么已经包含 +(以生成 %m-%d-%Y),要么他的输入类似于“Sat Dec 24 " (根本不是 %m-%d-%Y) :)
      • @phihag:从技术上讲,date可以通常打印任意日期。 GNU 日期为此使用 -d 标志,BSD 日期使用 -r-v
      • stackoverflow.com/questions/6508819/… 是一个很好的答案,似乎涵盖了大部分基础
      【解决方案3】:

      不需要 sed。

      #!/bin/sh
      
      input="12-24-11 13:37";
      
      month="${input%%-*}";
      input="${input#*-}";
      
      day="${input%%-*}";
      input="${input#*-}";
      
      year="${input%% *}";
      input="${input#* }";
      
      echo "$year-$month-$day $input";
      

      但如果您确实想使用外部工具,不妨使用带有 short 正则表达式的工具

      echo 12-24-11 13:37 | perl -pe 's/(.+)-(.+) /$2-$1 /'
      

      【讨论】:

      • 我在 perl 版本中切换了 $2$1,否则它就是一个 NOP。
      猜你喜欢
      • 2022-11-19
      • 2013-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多