as.period 将 Interval、Duration、difftime 和 numeric 类对象更改为具有指定单位的 period 类对象。
参数
- x
-
间隔、差异时间或数字对象
- unit
-
指定在哪些时间单位中构建周期的字符串。unit 仅针对as.period.numeric 方法和as.period.interval 方法实现。对于as.period.interval,as.period会将间隔转换为不大于指定单位的单位。
- ...
-
传递给as.period的附加参数
细节
用户必须指定用哪些时间单位来测量该时间段。时间段中每个时间单位的确切长度将取决于它发生的时间。请参阅Period 和period()
。单位的选择并非无足轻重。通常相等的单位长度可能会有所不同,具体取决于时间段发生的时间。例如,当发生闰秒时,一分钟比 60 秒长。
由于周期没有固定长度,因此无法在 Duration 对象之间准确地进行转换。 Duration 对象以精确的秒数测量时间跨度,请参阅 Duration 。因此,持续时间和周期之间不存在一对一的映射。当与 Duration 对象一起使用时,as.period 提供不精确的估计;持续时间根据最常见的时间单位长度(以秒为单位)分为时间单位。由于月份的长度特别可变,因此不能从持续时间对象中强制得出以月份为单位的期间。对于精确转换,首先使用 as.interval()
将持续时间转换为间隔。
如果您请求具有小单位的周期,则将时间间隔强制为周期可能会导致令人惊讶的行为。闰年有 366 天,但一年长。当单位设置为天时,此间隔将转换为 366 天;当单位设置为年时,此间隔将转换为 1 年。在日期上添加 366 天通常会得到与添加一年不同的结果。夏令时是这一规定不适用的一个例外。间隔长度根据 UTC 时间线计算,不使用夏令时。因此,以秒或分钟转换的周期不会反映夏令时导致的秒和分钟的实际变化。这些周期将显示 "naive" 以秒和分钟为单位的变化,这是由时钟时间的差异所表明的。请参阅下面的示例。
例子
span <- interval(ymd_hms("2009-01-01 00:00:00"), ymd_hms("2010-02-02 01:01:01")) # interval
as.period(span)
#> [1] "1y 1m 1d 1H 1M 1S"
as.period(span, unit = "day")
#> [1] "397d 1H 1M 1S"
"397d 1H 1M 1S"
#> [1] "397d 1H 1M 1S"
leap <- interval(ymd("2016-01-01"), ymd("2017-01-01"))
as.period(leap, unit = "days")
#> [1] "366d 0H 0M 0S"
as.period(leap, unit = "years")
#> [1] "1y 0m 0d 0H 0M 0S"
dst <- interval(
ymd("2016-11-06", tz = "America/Chicago"),
ymd("2016-11-07", tz = "America/Chicago")
)
# as.period(dst, unit = "seconds")
as.period(dst, unit = "hours")
#> [1] "25H 0M 0S"
per <- period(hours = 10, minutes = 6)
as.numeric(per, "hours")
#> [1] 10.1
as.numeric(per, "minutes")
#> [1] 606
相关用法
- R lubridate as.interval 将对象更改为间隔
- R lubridate as.duration 将对象更改为持续时间
- R lubridate as_date 将对象转换为日期或日期时间
- R lubridate am 日期时间是在上午还是下午?
- R lubridate DateTimeUpdate 更改日期对象的组成部分
- R lubridate stamp 基于人性化模板设置日期和时间格式
- R lubridate interval 用于创建和操作 Interval 对象的实用程序
- R lubridate is.difftime x 是 difftime 对象吗?
- R lubridate date 获取/设置日期时间的日期部分
- R lubridate round_date 日期时间对象的舍入、取整和取整方法
- R lubridate make_difftime 创建一个 difftime 对象。
- R lubridate is.timespan x 是时间长度吗?
- R lubridate with_tz 获取不同时区的日期时间
- R lubridate mplus 在日期中添加和减去月份,但不超过新月份的最后一天
- R lubridate cyclic_encoding 日期时间的循环编码
- R lubridate second 获取/设置日期时间的秒部分
- R lubridate quarter 获取日期时间的财政季度和学期
- R lubridate posix_utils 各种 POSIX 实用程序
- R lubridate date_decimal 将小数转换为日期
- R lubridate hour 获取/设置日期时间的小时部分
- R lubridate minute 获取/设置日期时间的分钟部分
- R lubridate month 获取/设置日期时间的月份部分
- R lubridate duration 创建一个持续时间对象。
- R lubridate leap_year 一年是闰年吗?
- R lubridate local_time 从日期时间向量获取当地时间。
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Change an object to a period。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。