7.7.8.6 时间与日期算术
对日期和时间进行普通算术运算往往会产生合理的结果。将时间加到日期上,或从日期中减去时间,会产生一个早或晚那么多的时间的新日期。两个日期之差得到这两个日期之间的间隔。两个时间相加得到合并后的时间。将时间乘以标量得到长那么多倍的时间。由于时间和日期本身就是数值,因此使用普通的加、减运算符即可实现这些目的。
将两个日期相加不会产生有用的结果。
日期和时间可能具有非常大的值。因此,对这些值求幂并不是一个好主意;此外,某些过程的精度也可能受到影响。如有必要,在执行分析之前,先将以秒为单位的时间或日期转换为其他单位,如天或年。
PSPP 提供了几个用于日期算术的函数:
函数:__DATEDIFF ( date2, date1, unit)
返回从 date1 到 date2 以 unit 计的间隔,unit 必须是一个带引号的字符串,取值为 ‘years’、‘quarters’、‘months’、‘weeks’、‘days’、‘hours’、‘minutes’、‘seconds’ 之一。结果为整数,向零截断。
一年被认为是从给定日期到次年同月、同日、同时刻的跨度。因此,从某一年的 1 月 1 日到次年的 1 月 1 日被视为完整的一年,但从闰年的 2 月 29 日到次年的 2 月 28 日则不是。类似地,一个月是从一个月份中的某一天到下一月份的同一天的跨度。因此,从某年的 1 月 31 日到次年 2 月的任意一天,都永远不会是完整的一个月。
函数:__DATESUM ( date, quantity, unit[, method])
返回 date 按指定 unit 推进给定 quantity 后的结果,unit 必须是字符串 ‘years’、‘quarters’、‘months’、‘weeks’、‘days’、‘hours’、‘minutes’、‘seconds’ 之一。
当 unit 为 ‘years’、‘quarters’ 或 ‘months’ 时,只考虑 quantity 的整数部分。加上这些单位之一可能导致月份中的日期超过该月的天数。此时 method 开始起作用:若省略 method 或将其指定为 ‘closest’(以带引号的字符串形式),则结果为该月的最后一天;否则,若指定为 ‘rollover’,则多出的天数会滚动计入下一个月。
当 unit 为 ‘weeks’、‘days’、‘hours’、‘minutes’ 或 ‘seconds’ 时,quantity 不会被取整为整数,且 method(若指定)会被忽略。