使用GNU日期运行以下命令时:
date -d "20145-01-23"
我得到以下结果:
日期:无效日期`20145-01-23'
但是,the manual表示该年份可以是任何数字:
对于数字月份,允许使用ISO 8601格式“年 - 月 - 日”,其中年份为正数[...]
因此,有两个问题:
答案 0 :(得分:3)
这适用于我,使用GNU coreutils 8.24:
$ date -d "20145-01-23"
Sat Jan 23 00:00:00 PST 20145
我不确定这个解释( 更新: 看起来我的猜测是正确的),但我的猜测是您使用的是32位time_t
而不是64位的系统。有32位,唯一可表示的日期是从星期五1901-12-13 20:45:52 UTC(2 31 秒在纪元前)到星期二2038-01-19 03:14:07 UTC (2 31 在纪元后-1秒。)
如果是这种情况,则此命令应该成功:
$ date -d 2037-01-01
Thu Jan 1 00:00:00 PST 2037
这个应该失败:
$ date -d 2039-01-01
date: invalid date ‘2039-01-01’
(我已经重建了最后一个命令的结果。第一个命令的输出会根据你的时区略有不同。)
如何获得与BSD日期相同的行为,BSD日期将其视为有效日期?
你是说你想要 BSD日期拒绝吗?如果是这样(更多推测),要么运行32位版本的BSD,要么测试所请求的时间是否在32位时间戳范围之外。
答案 1 :(得分:0)
BSD date -d
需要时区值。为了抵消年,日或其他,你传递-v NT ,其中N是数字,T是表示天,月或年的字符。
旗帜不同。有关常见的BSD变体,请参阅http://www.unix.com/man-page/All/1/date/了解Gnu版本,http://www.unix.com/man-page/FreeBSD/1/date/。