[1] "2026-04-23"
now()[1] "2026-04-23 16:24:58 CST"
TODO: 继续深入理解日期和时间。
日期时间通常以字符串的形式传入R中,然后转化为以数值形式储存的日期时间变量。
R的内部日期是以1970年1月1日1至今的天数来储存,内部时间则是以1970年1月1日至今的秒数来储存的。
lubridata包提供了一系列更方便的函数用来生成、管理日期。
不要直接按字符串处理日期时间,应该先转换为日期对象后在处理。
make_date(2020, 8, 27)[1] "2020-08-27"
make_datetime(2020, 8, 27, 21, 27, 15)[1] "2020-08-27 21:27:15 UTC"
format()函数stamp()函数,按给定模版的格式输出t <- make_datetime(2022, 4, 22, 17, 34, 15)
fmt <- stamp("Created on Sunday, jan 1, 1999 3:34 pm") # 模版,自动匹配时间组件
fmt(t)[1] "Created on Sunday, 04 22, 2022 17:34 pm"

[1] 2022
# 提取季度
quarter(t)[1] 2
# 计算时间是当年的第几天
yday(t)[1] 112
# 关于星期
weekdays(t)[1] "星期五"
wday(t) # 日期是本周的第几天,注意默认周日为第1天[1] 6
wday(t, label = TRUE)[1] 周五
Levels: 周日 < 周一 < 周二 < 周三 < 周四 < 周五 < 周六
week(t) # 本周是当年的第几周[1] 16
tz()显示当前时区with_tz()将时间数据转换为另一个时区的同一时间force_tz()将时间数据的时区强制转换为另一个时区tz(t)[1] "UTC"
with_tz(t, tz = "America/New_York")[1] "2022-04-22 13:41:45 EDT"
force_tz(t, tz = "America/New_York")[1] "2022-04-22 17:41:45 EDT"
round_date()四舍五入时间floor_date()和ceiling_date()向上或向下取整时间round_date(t, unit = "hour") # 按小时四舍五入取整[1] "2022-04-22 18:00:00 UTC"
floor_date(t, unit = "hour")[1] "2022-04-22 17:00:00 UTC"
ceiling_date(t, unit = "hour")[1] "2022-04-22 18:00:00 UTC"
interval()函数计算两个时间点的时间间隔,返回时间段数据。通常需要对时间段进行进一步识别。[1] 2019-08-10 14:00:00 UTC--2022-04-26 09:10:00 UTC
# 计算时间段有几天,同理可以计算有几个月、几分钟等
time_length(gap, "day")[1] 989.7986
duration()函数和period()函数计算数值+时间单位存储时段的长度。 period()函数考虑到了闰年和闰秒,所以在国内更推荐使用。