“date -d”不接受ISO 8601格式

时间:2014-01-14 19:24:20

标签: bash date

我做错了吗?当我在几秒钟内使用ISO 8601选项时,我无法相信date -d不接受自己的输出。我要么必须删除'T'或时区才能让它工作。

> date -Iseconds
2014-01-14T11:07:57-0800

> date -d "2014-01-14T11:07:57-0800"
date: invalid date `2014-01-14T11:07:57-0800'

> date -d "2014-01-14 11:07:57-0800" # remove the 'T'
Tue Jan 14 11:07:57 PST 2014

> date -d "2014-01-14T11:07:57" # remove the timezone
Mon Jan 13 20:07:57 PST 2014

我目前的解决方案是使用date +"%Y-%m-%d %T %z"代替date -Iseconds,但我只是觉得这很奇怪。

2 个答案:

答案 0 :(得分:0)

也许您的语言环境干扰了日期解析?

尝试指定时间区域设置:

$ LC_TIME=C date -d "2014-01-14T11:07:57-0800"
Tue Jan 14 11:07:57 PST 2014

这适用于GNU日期8.13。

答案 1 :(得分:0)

自版本8.13(发布于2011-09-08)以来,GNU coreutils仅支持ISO 8601日期作为输入。

感谢@ John1024的参考 https://unix.stackexchange.com/questions/107750/how-to-parse-iso8601-dates-with-linux-date-command