interval()
创建具有指定开始日期和结束日期的 Interval 对象。如果开始日期早于结束日期,则间隔将为正值。否则,它将是负面的。从 v1.7.2 开始支持 ISO 8601 格式的字符向量。
int_start()
/int_end()
和 int_start<-()
/int_end<-()
分别是间隔的开始/结束日期的"accessors" 和"setters"。
int_flip()
颠倒间隔中开始日期和结束日期的顺序。新间隔发生在与原始间隔相同的时间跨度内,但方向相反。
int_shift()
将时间间隔的开始日期和结束日期在时间轴上移动指定的量。请注意,如果间隔由 period 对象移动,则这可能会更改间隔的确切长度。由 Duration 或 difftime 对象移动的间隔将保留其精确的长度(以秒为单位)。
int_overlaps()
测试两个间隔是否重叠。
int_standardize()
确保区间对象中的所有区间均为正数。如果间隔不为正,则翻转它,使其保留其端点但变为正。
int_aligns()
测试两个间隔是否共享一个端点。每个间隔的方向被忽略。 int_align测试每个间隔的最早或最晚时刻是否同时出现。
int_diff()
返回日期时间向量的元素之间出现的间隔。 int_diff()
与 diff()
的 POSIXt 和 Date 方法类似,但返回 Interval 对象而不是 difftime 对象。
用法
interval(start = NULL, end = NULL, tzone = tz(start))
start %--% end
is.interval(x)
int_start(int)
int_start(int) <- value
int_end(int)
int_end(int) <- value
int_length(int)
int_flip(int)
int_shift(int, by)
int_overlaps(int1, int2)
int_standardize(int)
int_aligns(int1, int2)
int_diff(times)
参数
- start, end
-
POSIXt、日期或字符向量。当
start
是字符向量且结尾为NULL
时,假定采用 ISO 8601 规范,但对日期和周期进行更宽松的 lubridate 样式解析(请参阅示例)。 - tzone
-
显示时间间隔的公认时区
- x
-
一个 R 对象
- int
-
区间对象
- value
-
间隔的开始/结束分配给
int
- by
-
要移动的周期或持续时间对象(对于
int_shift
) - int1
-
一个 Interval 对象(对于
int_overlaps()
、int_aligns()
) - int2
-
一个 Interval 对象(对于
int_overlaps()
、int_aligns()
) - times
-
POSIXct、POSIXlt 或 Date 类日期时间的向量(对于
int_diff()
)
值
interval()
-- Interval 对象。
int_start()
和 int_end()
在用作访问器时返回 POSIXct 日期对象。用作二传手时什么也没有。
int_length()
-- 间隔的数字长度(以秒为单位)。负数表示负区间。
int_flip()
-- 翻转区间对象
int_shift()
-- 一个 Interval 对象
int_overlaps()
-- 逻辑,如果 int1 和 int2 重叠至少一秒,则为 TRUE。否则为假
int_aligns()
-- 逻辑,如果 int1 和 int2 在同一时刻开始或结束,则为 TRUE。否则为假
int_diff()
-- 包含 n 个日期时间之间的 n-1 个间隔的间隔对象
细节
间隔是受两个实际日期时间约束的时间跨度。使用 as.period()
、 as.duration()
可以将间隔准确地转换为周期或持续时间对象。由于间隔锚定到固定的时间历史记录,因此可以计算经过的确切秒数以及间隔期间发生的可变长度时间单位的数量。
例子
interval(ymd(20090201), ymd(20090101))
#> [1] 2009-02-01 UTC--2009-01-01 UTC
date1 <- ymd_hms("2009-03-08 01:59:59")
date2 <- ymd_hms("2000-02-29 12:00:00")
interval(date2, date1)
#> [1] 2000-02-29 12:00:00 UTC--2009-03-08 01:59:59 UTC
interval(date1, date2)
#> [1] 2009-03-08 01:59:59 UTC--2000-02-29 12:00:00 UTC
span <- interval(ymd(20090101), ymd(20090201))
### ISO Intervals
interval("2007-03-01T13:00:00Z/2008-05-11T15:30:00Z")
#> [1] 2007-03-01 13:00:00 UTC--2008-05-11 15:30:00 UTC
interval("2007-03-01T13:00:00Z/P1Y2M10DT2H30M")
#> [1] 2007-03-01 13:00:00 UTC--2008-05-11 15:30:00 UTC
interval("P1Y2M10DT2H30M/2008-05-11T15:30:00Z")
#> [1] 2007-03-01 13:00:00 UTC--2008-05-11 15:30:00 UTC
interval("2008-05-11/P2H30M")
#> [1] 2008-05-11 UTC--2010-11-11 02:00:00 UTC
### More permisive parsing (as long as there are no intermittent / characters)
interval("2008 05 11/P2hours 30minutes")
#> [1] 2008-05-11 UTC--2008-05-11 02:30:00 UTC
interval("08 05 11/P 2h 30m")
#> [1] 2008-05-11 UTC--2010-11-11 02:00:00 UTC
is.interval(period(months = 1, days = 15)) # FALSE
#> [1] FALSE
is.interval(interval(ymd(20090801), ymd(20090809))) # TRUE
#> [1] TRUE
int <- interval(ymd("2001-01-01"), ymd("2002-01-01"))
int_start(int)
#> [1] "2001-01-01 UTC"
int_start(int) <- ymd("2001-06-01")
int
#> [1] 2001-06-01 UTC--2002-01-01 UTC
int <- interval(ymd("2001-01-01"), ymd("2002-01-01"))
int_end(int)
#> [1] "2002-01-01 UTC"
int_end(int) <- ymd("2002-06-01")
int
#> [1] 2001-01-01 UTC--2002-06-01 UTC
int <- interval(ymd("2001-01-01"), ymd("2002-01-01"))
int_length(int)
#> [1] 31536000
int <- interval(ymd("2001-01-01"), ymd("2002-01-01"))
int_flip(int)
#> [1] 2002-01-01 UTC--2001-01-01 UTC
int <- interval(ymd("2001-01-01"), ymd("2002-01-01"))
int_shift(int, duration(days = 11))
#> [1] 2001-01-12 UTC--2002-01-12 UTC
int_shift(int, duration(hours = -1))
#> [1] 2000-12-31 23:00:00 UTC--2001-12-31 23:00:00 UTC
int1 <- interval(ymd("2001-01-01"), ymd("2002-01-01"))
int2 <- interval(ymd("2001-06-01"), ymd("2002-06-01"))
int3 <- interval(ymd("2003-01-01"), ymd("2004-01-01"))
int_overlaps(int1, int2) # TRUE
#> [1] TRUE
int_overlaps(int1, int3) # FALSE
#> [1] FALSE
int <- interval(ymd("2002-01-01"), ymd("2001-01-01"))
int_standardize(int)
#> [1] 2001-01-01 UTC--2002-01-01 UTC
int1 <- interval(ymd("2001-01-01"), ymd("2002-01-01"))
int2 <- interval(ymd("2001-06-01"), ymd("2002-01-01"))
int3 <- interval(ymd("2003-01-01"), ymd("2004-01-01"))
int_aligns(int1, int2) # TRUE
#> [1] TRUE
int_aligns(int1, int3) # FALSE
#> [1] FALSE
dates <- now() + days(1:10)
int_diff(dates)
#> [1] 2023-02-15 11:55:03 UTC--2023-02-16 11:55:03 UTC
#> [2] 2023-02-16 11:55:03 UTC--2023-02-17 11:55:03 UTC
#> [3] 2023-02-17 11:55:03 UTC--2023-02-18 11:55:03 UTC
#> [4] 2023-02-18 11:55:03 UTC--2023-02-19 11:55:03 UTC
#> [5] 2023-02-19 11:55:03 UTC--2023-02-20 11:55:03 UTC
#> [6] 2023-02-20 11:55:03 UTC--2023-02-21 11:55:03 UTC
#> [7] 2023-02-21 11:55:03 UTC--2023-02-22 11:55:03 UTC
#> [8] 2023-02-22 11:55:03 UTC--2023-02-23 11:55:03 UTC
#> [9] 2023-02-23 11:55:03 UTC--2023-02-24 11:55:03 UTC
相关用法
- R lubridate is.difftime x 是 difftime 对象吗?
- R lubridate is.timespan x 是时间长度吗?
- R lubridate is.instant x 是日期时间对象吗?
- R lubridate DateTimeUpdate 更改日期对象的组成部分
- R lubridate stamp 基于人性化模板设置日期和时间格式
- R lubridate as_date 将对象转换为日期或日期时间
- R lubridate date 获取/设置日期时间的日期部分
- R lubridate round_date 日期时间对象的舍入、取整和取整方法
- R lubridate make_difftime 创建一个 difftime 对象。
- R lubridate with_tz 获取不同时区的日期时间
- R lubridate mplus 在日期中添加和减去月份,但不超过新月份的最后一天
- R lubridate cyclic_encoding 日期时间的循环编码
- R lubridate as.interval 将对象更改为间隔
- R lubridate second 获取/设置日期时间的秒部分
- R lubridate quarter 获取日期时间的财政季度和学期
- R lubridate posix_utils 各种 POSIX 实用程序
- R lubridate date_decimal 将小数转换为日期
- R lubridate as.duration 将对象更改为持续时间
- R lubridate hour 获取/设置日期时间的小时部分
- R lubridate minute 获取/设置日期时间的分钟部分
- R lubridate month 获取/设置日期时间的月份部分
- R lubridate duration 创建一个持续时间对象。
- R lubridate leap_year 一年是闰年吗?
- R lubridate local_time 从日期时间向量获取当地时间。
- R lubridate make_datetime 从数字表示高效创建日期时间
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Utilities for creation and manipulation of Interval objects。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。