下一个: , 上一个: Day of week items, 上层: Date input formats


A.6.6 日期字串中的相对项

Relative items 向前或向后调整指定日期(如不指出日期为当前日期)。 相对项的效果是累积的。这里有一些例子: examples:

     1 year
     1 year ago
     3 years
     2 days

时间的单位可以用字串 `year' 或 `month' 替换,表示移动整年或整月。 有一些模糊的单位,像 years 和 months 时间段并不一致。精确的单位有 `fortnight' 表示 14 天,`week' 是 7 天,`day' 是 24 小时,`hour' 是 60 分钟, `minute' 或 `min' 是 60 秒,`second' 或 `sec' 是一秒。 单位后面可以有后缀 `s',但被忽略。

时间单位前面可以跟乘数,它是一个符号数。没有符号的数字认为是正数。没有给出乘数 隐含为 1。相对时间后面的 `ago' 字串等于乘数值为-1。

字串 `tomorrow' 值为将来的一天(等于 `day'),字串 `yesterday' 值为过去的一天(等于 `day ago')。

字串 `now' 或 `today' 相对项等同于用零值替代,如果没有被前面项目修改,这些字串 代表当前时间。它们也可以用来强调其他项,如 `12:00 today'。字串 `this' 也代表零值, 但常用于 `this thursday' 这样的日期字串里面。

当相对项让日期跨越时钟调整边界时,典型的例子是夏时制,日期和时间的结果也要相应 地调节。

模糊的单位会另相对项出现问题。例如,`2003-07-31 -1 month' 可以等于 2003-07-01,这是因为 2003-06-31 是一个无效的日期。为了更可靠地确定上一个月, 你可以询问当前月十五号的上一个月,例如:

     $ date -R
     Thu, 31 Jul 2003 13:02:39 -0700
     $ date --date='-1 month' +'Last month was %B?'
     Last month was July?
     $ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!'
     Last month was June!

还有,要小心处理夏令时闰年日期和时间的改变。一些情形下它们增加或减少 24 小时, 所以开始日历计算前,最好先将 TZ 环境变量设成 `UTC0'。