我有一些特定日期格式的字符串,我想使用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是不可能的)。
答案 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