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

66.关于时间跨度-time span(二)

作者: 心惊梦醒 | 来源:发表于2021-09-23 22:55 被阅读0次

【上一篇:65.关于时间跨度-time span(一)】
【下一篇:67.关于时间跨度-time span(三)】

    period:周期,用一些人为定义的时间单元,比如年、月、周、日、时、分等表示时间跨度。period没有固定的长度,period的长度取决于它要加到的date-time对象。
    period存在的意义是什么?举个例子:2021-01-01 01:00:00的一年之后是什么时间?你的答案当然是2022-01-01 01:00:00,但是如果用duration计算,得到的结果如下:

> (now_year<-ymd_hms("2021-01-01 1:0:0"))
[1] "2021-01-01 01:00:00 UTC"
> now_year + dyears(1)
[1] "2022-01-01 07:00:00 UTC"

    这是因为一年用duration(物理时间)表示是365.25天,长度固定,但是人为定义的2021年是365天,所以最后会多6个小时(24*0.25)。period是一堆人为定义的时间单位,所以2021-01-01 1:0:0加1年正好是你想要的结果。如下:

> now_year + years(1)
[1] "2022-01-01 01:00:00 UTC"

    创造和解析period对象的函数有,这些函数的返回值是一个period对象:

> period(num = NULL, units = "second", ...)
num是数字向量
units是时间单元向量
例子:
> period(c(90, 5), c("second", "minute"))
[1] "5M 90S"
# 多个值时间累加
> period(second = 3, minute = 1, hour = 2, day = 13, week = 1)
[1] "20d 2H 1M 3S"
> period("2hours 2minutes 1second")
[1] "2H 2M 1S"

> is.period(x)
[1] FALSE
# 时分秒都是大写字母H、M、S;年月日是小写字母:y、m、d
> seconds(x = 1)
[1] "1S"
> minutes(x = 1)
[1] "1M 0S"
> hours(x = 1)
[1] "1H 0M 0S"
> days(x = 1)
[1] "1d 0H 0M 0S"
> weeks(x = 1)
[1] "7d 0H 0M 0S"
> years(x = 1)
[1] "1y 0m 0d 0H 0M 0S"
> milliseconds(x = 1)
[1] "0.001S"
> microseconds(x = 1)
[1] "1e-06S"
> nanoseconds(x = 1)
[1] "1e-09S"
> picoseconds(x = 1)
[1] "1e-12S"

months(x, abbreviate)

    fligts数据集中,有的arr_time还小于dep_time,这是因为这些航班是跨夜航班,因此可以用days()函数在arr_time上加一天,这样就符合人的习惯了。

【上一篇:65.关于时间跨度-time span(一)】
【下一篇:67.关于时间跨度-time span(三)】

相关文章

网友评论

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

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