您如何为迄今为止的输入指定格式?


19

给定日期和时间格式无法识别的时间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将输入转换为格式正确的日期字符串的方法?


Answers:


10

POSIX和GNU date都没有--magic-option。FreeBSD对其-f进行了调用(其语法类似于date的输出格式说明符,而不是您建议的语法)。

您的日期非常接近于GNU日期所能识别的:只需用冒号代替将日期和时间分隔开的冒号即可。

date -d "$(echo "09SEP2012:23:58:46" | sed 's/:/ /')"

1
和自定义格式?正则表达式是唯一可行的方法吗?这太可怕了:-(
phil294 '17

1
您无法在不了解日期格式的情况下解析日期,经典示例为01/02/03
吉尔斯(Gilles)'所以

5

我写了一堆工具(dateutils),它们以脚本友好的方式处理日期和时间。您的魔术选择有--input-format|-i,例如:

dconv -i '%d%b%Y:%H:%M:%S' "09SEP2012:23:58:46"
=>
  2012-09-09T23:58:46

虽然dconv不直接支持date的输出格式(它没有赋予TZ或环境的任何东西),有一个工具,strptimedateutils是不支持的%Z格式说明。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.