GNU日期和自定义格式

时间:2013-12-03 03:59:35

标签: linux bash date gnu

我有一些特定日期格式的字符串,我想使用GNU date命令(coreutils 8.20)。我可以使用+ FORMAT字符串输出日期,但不能理解使用相同字符串输入的字符串。我很确定我错过了一些明显的东西。是什么给了什么?

teggl@mckinley { ~/scripts }$ date +%Y%m%dT%H%M%S
20131202T182052
teggl@mckinley { ~/scripts }$ date --date="20131202T182052" +%Y%m%dT%H%M%S
date: invalid date ‘20131202T182052’

注意:我不是在寻找awk-y字符串解析,我需要日期来理解输入日期,所以它知道它是否有效(例如日期20140231T120000是不可能的)。

2 个答案:

答案 0 :(得分:3)

根据手册页:

  

--date = STRING是一个大多数免费格式的人类可读日期   字符串如“Sun,2004年2月29日16:21:42 -0800”或“2004-02-29   16:21:42“甚至是”下周四“。日期字符串可能包含项目   表示日历日期,时间,时区,星期几,   相对时间,相对日期和数字。空字符串表示   一天的开始。日期字符串格式比复杂   这里很容易记录,但在信息中有详细描述   文档。

“T”似乎混淆了它。这有效:

$ date --date="2013-12-02 18:20:52" +%Y%m%dT%H%M%S
20131202T182052

输出格式与输入格式无关。

答案 1 :(得分:1)

如果这是您坚持使用的输入格式,您可能需要在将其发送到日期之前重新格式化:

datestr=20131202T182052
datestr=$( echo $datestr | sed -e 's/T/ /' -e 's/^\([0-9][0-9][0-9][0-9]\)\([0-9][0-9]\)/\1-\2-/' -e 's/ \([0-9][0-9]\)\([0-9][0-9]\)/ \1:\2:/' )

date --date="$datestr" +%Y%m%dT%H%M%S