period()
使用指定值創建或解析周期對象。
用法
period(num = NULL, units = "second", ...)
is.period(x)
seconds(x = 1)
minutes(x = 1)
hours(x = 1)
days(x = 1)
weeks(x = 1)
years(x = 1)
milliseconds(x = 1)
microseconds(x = 1)
nanoseconds(x = 1)
picoseconds(x = 1)
# S3 method for numeric
months(x, abbreviate)
參數
- num
-
數字或字符向量。字符向量可以以方便的速記格式或 ISO 8601 規範指定句點。支持所有明確的名稱單位和縮寫,"m" 代表月,"M" 代表分鍾,除非存在 ISO 8601 "P" 修飾符(請參閱示例)。支持小數單位,但小數部分始終轉換為秒。
- units
-
列出要使用的單位類型的字符向量。 units 中的單位按照順序與 num 中的值進行匹配。當
num
為字符時,該參數被忽略。 - ...
-
要包含在該期間內的時間單位及其數量的列表。支持秒、分鍾、小時、天、周、月和年。通常僅存在
num
或...
之一。如果兩者都存在,則將句點連接起來。 - x
-
is.periods
的任何 R 對象以及基本構造函數的單元數量的數值。除 seconds() 外,x 必須是整數。 - abbreviate
-
被忽略了。為了與基本命名空間中的 S3 通用保持一致。
細節
在Period對象中,時間單位沒有固定長度(秒除外),直到它們被添加到日期時間中。每個時間單位的長度將取決於添加它的日期時間。例如,從 2009-01-01 開始的一年將有 365 天。從 2012 年 1 月 1 日開始的一年將有 366 天。當使用 period 對象執行數學運算時,每個單位都會單獨應用。一個周期的長度如何在其單位之間分配是很重要的。例如,當閏秒發生時,1 分鍾比 60 秒長。
周期跟蹤兩個日期時間之間 "clock time" 的變化。它們以常見的時間相關單位進行測量:年、月、日、小時、分鍾和秒。除秒外的每個單位都必須以整數值表示。
除了主構造函數和解析器 period()
之外,還可以使用專用函數創建周期對象: years()
、 months()
、 weeks()
、 days()
、 hours()
、 minutes()
和 seconds()
。這些對象可以添加到日期時間或從中減去,以創建類似於麵向對象編程的用戶接口。
注意:當涉及不存在的日期時(例如非閏年的 2 月 29 日),帶句點的算術可能會導致未定義的行為。有關更多詳細信息,請參閱Period,有關替代操作,請參閱%m+%
和add_with_rollback()
。
也可以看看
Period、period()
、%m+%
、add_with_rollback()
例子
### Separate period and units vectors
period(c(90, 5), c("second", "minute"))
#> [1] "5M 90S"
# "5M 90S"
period(-1, "days")
#> [1] "-1d 0H 0M 0S"
period(c(3, 1, 2, 13, 1), c("second", "minute", "hour", "day", "week"))
#> [1] "20d 2H 1M 3S"
period(c(1, -60), c("hour", "minute"))
#> [1] "1H -60M 0S"
period(0, "second")
#> [1] "0S"
### Units as arguments
period(second = 90, minute = 5)
#> [1] "5M 90S"
period(day = -1)
#> [1] "-1d 0H 0M 0S"
period(second = 3, minute = 1, hour = 2, day = 13, week = 1)
#> [1] "20d 2H 1M 3S"
period(hour = 1, minute = -60)
#> [1] "1H -60M 0S"
period(second = 0)
#> [1] "0S"
period(c(1, -60), c("hour", "minute"), hour = c(1, 2), minute = c(3, 4))
#> [1] "1H -60M 0S" "1H 3M 0S" "2H 4M 0S"
### Lubridate style parsing
period("2M 1sec")
#> [1] "2M 1S"
period("2hours 2minutes 1second")
#> [1] "2H 2M 1S"
period("2d 2H 2M 2S")
#> [1] "2d 2H 2M 2S"
period("2days 2hours 2mins 2secs")
#> [1] "2d 2H 2M 2S"
period("2 days, 2 hours, 2 mins, 2 secs")
#> [1] "2d 2H 2M 2S"
# Missing numerals default to 1. Repeated units are added up.
duration("day day")
#> [1] "172800s (~2 days)"
### ISO 8601 parsing
period("P10M23DT23H") # M stands for months
#> [1] "10m 23d 23H 0M 0S"
period("10DT10M") # M stands for minutes
#> [1] "10d 0H 10M 0S"
period("P3Y6M4DT12H30M5S") # M for both minutes and months
#> [1] "3y 6m 4d 12H 30M 5S"
period("P23DT60H 20min 100 sec") # mixing ISO and lubridate style parsing
#> [1] "23d 60H 20M 100S"
### Comparison with characters (from v1.6.0)
duration("day 2 sec") > "day 1sec"
#> [1] TRUE
### Elementary Constructors
x <- ymd("2009-08-03")
x + days(1) + hours(6) + minutes(30)
#> [1] "2009-08-04 06:30:00 UTC"
x + days(100) - hours(8)
#> [1] "2009-11-10 16:00:00 UTC"
class(as.Date("2009-08-09") + days(1)) # retains Date class
#> [1] "Date"
as.Date("2009-08-09") + hours(12)
#> [1] "2009-08-09 12:00:00 UTC"
class(as.Date("2009-08-09") + hours(12))
#> [1] "POSIXct" "POSIXt"
# converts to POSIXt class to accomodate time units
years(1) - months(7)
#> [1] "1y -7m 0d 0H 0M 0S"
c(1:3) * hours(1)
#> [1] "1H 0M 0S" "2H 0M 0S" "3H 0M 0S"
hours(1:3)
#> [1] "1H 0M 0S" "2H 0M 0S" "3H 0M 0S"
# sequencing
y <- ymd(090101) # "2009-01-01 CST"
y + months(0:11)
#> [1] "2009-01-01" "2009-02-01" "2009-03-01" "2009-04-01" "2009-05-01"
#> [6] "2009-06-01" "2009-07-01" "2009-08-01" "2009-09-01" "2009-10-01"
#> [11] "2009-11-01" "2009-12-01"
# compare DST handling to durations
boundary <- ymd_hms("2009-03-08 01:59:59", tz = "America/Chicago")
boundary + days(1) # period
#> [1] "2009-03-09 01:59:59 CDT"
boundary + ddays(1) # duration
#> [1] "2009-03-09 02:59:59 CDT"
is.period(as.Date("2009-08-03")) # FALSE
#> [1] FALSE
is.period(period(months = 1, days = 15)) # TRUE
#> [1] TRUE
相關用法
- R lubridate posix_utils 各種 POSIX 實用程序
- R lubridate pretty_dates 計算日期時間數據的有吸引力的軸中斷
- R lubridate parse_date_time 用戶友好的日期時間解析函數
- R lubridate DateTimeUpdate 更改日期對象的組成部分
- R lubridate stamp 基於人性化模板設置日期和時間格式
- R lubridate interval 用於創建和操作 Interval 對象的實用程序
- R lubridate is.difftime x 是 difftime 對象嗎?
- R lubridate as_date 將對象轉換為日期或日期時間
- 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 as.interval 將對象更改為間隔
- R lubridate second 獲取/設置日期時間的秒部分
- R lubridate quarter 獲取日期時間的財政季度和學期
- R lubridate date_decimal 將小數轉換為日期
- R lubridate as.duration 將對象更改為持續時間
- R lubridate hour 獲取/設置日期時間的小時部分
- R lubridate minute 獲取/設置日期時間的分鍾部分
- R lubridate month 獲取/設置日期時間的月份部分
- R lubridate duration 創建一個持續時間對象。
- R lubridate leap_year 一年是閏年嗎?
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Create or parse period objects。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。