美文网首页
67.关于时间跨度-time span(三)

67.关于时间跨度-time span(三)

作者: 心惊梦醒 | 来源:发表于2021-09-24 00:18 被阅读0次

【上一篇:66.关于时间跨度-time span(二)】
【下一篇:68.关于时区】

    第三个表示时间跨度的class是intervals,是一个有起始点的duration:这使得它很精确,所以你可以精确地确定它有多长。
    可以用interval()函数创建一个时间间隔,也可以用%--%符号来创建。返回值是一个interval对象。如下:

interval(start = NULL, end = NULL, tzone = tz(start))
start %--% end

start和end是POSIXt, Date or a character vectors
时间间隔还和时区有关

> interval(ymd(20090201), ymd(20090101))
[1] 2009-02-01 UTC--2009-01-01 UTC
> ymd(20090201) %--% ymd(20090101)
[1] 2009-02-01 UTC--2009-01-01 UTC

    时间间隔的应用可以是:求从今天到明年今天有多少天。

> next_year <- today() + years(1)
> (today() %--% next_year) / ddays(1)
[1] 365

总结

    duration是物理时间,以秒为基本单位,在duration维度上,分、时、天、周、月、年有固定的长度,即1分=60s,1小时=3600秒,1天=86400秒,1周=592200秒,1个月=2629800秒,1年=31557600秒(一年=365.25天,一个月=365.25/12天)。period是人为定义的时间跨度,我们说一年,那一年到底有多长呢?可以有365天,也可以有366天。interval是两个时间点之间的物理时间。
    date、date-time和duration、period、interval以及number之间可以进行数学计算。如下图:

图片来自R for Data Science这本书,侵删
    1) date与date之间、date-time和date-time之间求差,得到的是时间差对象(date和date-time都是人为定义的时间概念):
> ymd("2021-06-01") - ymd("2021-05-01")
Time difference of 31 days
> ymd_h("2021-06-01 2") - ymd_h("2021-05-01 1")
Time difference of 31.04167 days

    2) interval与时间差类似。除了interval,duration与duration之间、period与period之间可以进行运算(结果的类型也是duration、period)。运算可以从相关构造函数上看出来。

> dyears(2)-dyears(1)
[1] "31557600s (~1 years)"
> dyears(2)+dyears(1)
[1] "94672800s (~3 years)"
> dyears(2)+dyears(1)
[1] "94672800s (~3 years)"
> years(2)+years(1)
[1] "3y 0m 0d 0H 0M 0S"

    duration与duration之间可以做除法,因为duration是物理时间,任何时间单位的长度都是固定的秒数,不管何时,什么时区,duration的相除结果都是一样的。period与period虽然也可以执行除法,但有时候结果并不是你想要的,因为period是人为定的时间跨度,同样说一年,但每年的一年长度并不一样,同样说一天,不同时区的一天长度也不一样。

> dyears(2)/ddays(1)
[1] 730.5
> years(2)/days(1)
[1] 730.5

    interval与interval之间不能做任何算数运算。interval与duration和period之间都可以做除法,结果的意义是一个interval有多少个duration或period

> interval(ymd(20090101), ymd(20090201))/ddays(1)
[1] 31
> interval(ymd(20090101), ymd(20090201))/dweeks(1)
[1] 4.428571
> interval(ymd(20090101), ymd(20090201))/days(1)
[1] 31

    3) date、date-time与时间跨度duration、period之间都可以做加和减运算。
    4)数字可以与date、date-time做加减运算、可以和时间跨度(除interval)做加减乘除运算。

【上一篇:66.关于时间跨度-time span(二)】
【下一篇:68.关于时区】

相关文章

网友评论

      本文标题:67.关于时间跨度-time span(三)

      本文链接:https://www.haomeiwen.com/subject/ipdagltx.html