本文使用第三方lubridate库,用于处理R的日期时间对象。在使用此库以前,需要对R自带的日期时间类型有所了解:R语言中,分别设计了两个日期时间类型:POSIXlt,对应字符串形式表达的日期时间;POSIXct,对应数字形式表达的日期时间。此外,还有一个专门针对日期的类型Date。
lubridate基于POSIXct构建。
# 任意常见格式的日期时间字符串都能自动识别
arrive <- ymd_hms("2011-06-04 12:00:00", tz = "Pacific/Auckland")
# 年月日
ymd("20110604")
as.POSIXct(1307145600, origin="1970-01-01", tz="Pacific/Auckland")
as.character(arrive, format="%Y-%m-%d %H:%M:%S")
as.numeric(arrive)
second(arrive)
wday(arrive)
wday(arrive, label=TRUE)
# 时间段
minutes(2) ## period
dminutes(2) ## duration
# 加减运算
ymd(20120101) + dyears(1) ## 二者输出有区别
ymd(20120101) + years(1)
meetings <- meeting + weeks(0:5)
auckland / ddays(2)
# 日期时间区间,前闭后开
auckland <- interval(arrive, leave)
auckland
jsm <- interval(ymd(20110720, tz = "Pacific/Auckland"), ymd(20110831, tz = "Pacific/Auckland"))
jsm
int_overlaps(jsm, auckland)
setdiff(auckland, jsm)
# 时间戳不变,北京8点变为伦敦0点,同一时刻
meeting <- ymd_hms("2011-07-01 09:00:00", tz = "Pacific/Auckland")
with_tz(meeting, "America/Chicago")
# 时间戳改变,显示值不变,北京8点变为伦敦8点
mistake <- force_tz(meeting, "America/Chicago")
with_tz(mistake, "Pacific/Auckland")