←
PDF 276 / 520 Periods
→
English · PDF 276
Original PDF page 276
中文 · PDF 276

#> [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 提供了时期。时期也是时间跨度,但没有固定的秒数长度;相反,它们使用“人类”的时间单位,比如天和月。这使得它们能够以更直观的方式工作: