#> [5] "345600s (~4 days)" "432000s (~5 days)" dweeks(3) #> [1] "1814400s (~3 weeks)" dyears(1) #> [1] "31536000s (~52.14 weeks)"
时长总是以秒为单位记录时间跨度。更大的单位是通过将分钟、小时、天、周和年按标准比率转换为秒来创建的(1分钟60秒,1小时60分钟,1天24小时,1周7天,1年365天)。
你可以对时长进行加法和乘法运算:
2 * dyears(1) #> [1] "63072000s (~2 years)" dyears(1) + dweeks(12) + dhours(15) #> [1] "38847600s (~1.23 years)"
你可以对天加上或减去时长:
tomorrow <- today() + ddays(1) last_year <- today() - dyears(1)
然而,由于时长表示的是精确的秒数,有时你可能会得到意想不到的结果:
one_pm <- ymd_hms( "2016-03-12 13:00:00", tz = "America/New_York" ) one_pm #> [1] "2016-03-12 13:00:00 EST" one_pm + ddays(1) #> [1] "2016-03-13 14:00:00 EDT"
为什么3月12日下午1点的下一天是3月13日下午2点?!如果仔细观察日期,你可能还会注意到时区发生了变化。由于夏令时(DST),3月12日只有23个小时,所以如果我们加上一整天所对应的秒数,最终会得到一个不同的时间。
时期
为了解决这个问题,lubridate 提供了时期。时期也是时间跨度,但没有固定的秒数长度;相反,它们使用“人类”的时间单位,比如天和月。这使得它们能够以更直观的方式工作: