给定 无法识别的格式的日期和时间date
,我怎样才能date
识别该日期和时间?
例如:
$ date -d "09SEP2012:23:58:46"
date: invalid date `09SEP2012:23:58:46'
$ date -d "09SEP2012:23:58:46" --magic-option "ddMMMYYY:hh:mm:ss"
Sun Sep 9 23:58:46 MDT 2012
确实--magic-option
存在?如果没有,是否有更优雅的方法来解决这个问题,而不是使用sed
将输入转换为格式良好的日期字符串?
答案1
POSIX 和 GNU 日期都没有--magic-option
. FreeBSD 调用它-f
(其语法类似于 的date
输出格式说明符,而不是您建议的语法)。
您的日期非常接近被 GNU 日期识别:所需要做的就是用空格替换分隔日期和时间的冒号。
date -d "$(echo "09SEP2012:23:58:46" | sed 's/:/ /')"
答案2
答案3
如果你使用的是已经安装好的Ubuntu这样的环境busybox
,你可以这样做busybox date -D "$input_format" -d "$input"
,比如:
$ busybox date -D "%m/%d/%Y %H:%M:%S" -d "02/27/2013 23:48:00"
Wed Feb 27 23:48:00 CST 2013
如果要将输出字符串格式化为一些非标准的东西您可以使用 指定输出格式busybox date -D "$input_format" -d "$input" +"$output_format"
,例如
$ busybox date -D "%m/%d/%Y" -d "02/27/2013" +"%d.%-m.%y"
27.2.13
但对于符合 ISO-8601 的日期,请-I
按照所需的精度级别使用,例如:
$ busybox date -D "%m/%d/%Y %H:%M:%S" -d "02/27/2013 23:48:00" -Iseconds
2013-02-27T23:48:00-0600
笔记
这busybox 手册页。这可能不起作用具有%Z
时区格式。