我做错了吗?当我在几秒钟内使用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
,但我只是觉得这很奇怪。
答案 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