使用 lubridate 从字符串中解析日期和日期时间
lubridate
包提供了方便的功能,可以从字符串格式化日期和日期时间对象。这些功能是排列的
信件 | 要解析的元素 | 基准 R 等价物 |
---|---|---|
ÿ | 年 | %y ,%Y |
m(带 y 和 d) | 月 | %m ,%b ,%h ,%B |
d |
天 | %d ,%e |
H |
小时 | %H ,%I%p |
m(带 h 和 s) | 分钟 | %M |
小号 | 秒 | %S |
例如,ymd()
用于解析具有年份的日期,然后是月份,然后是日期,例如 2016-07-22
或 ymd_hms()
,用于解析订单年,月,日,小时,分钟,秒的日期时间,例如 2016-07-22 13:04:47
。
这些函数能够识别大多数分隔符(例如/
,-
和空格),而无需其他参数。它们也适用于不一致的分隔符。
日期
日期函数返回类 Date
的对象。
library(lubridate)
mdy(c(' 07/02/2016 ', '7 / 03 / 2016', ' 7 / 4 / 16 '))
## [1] "2016-07-02" "2016-07-03" "2016-07-04"
ymd(c("20160724","2016/07/23","2016-07-25")) # inconsistent separators
## [1] "2016-07-24" "2016-07-23" "2016-07-25"
日期时间
实用功能
可以使用 ymd_hms
变体解析日期时间,包括 ymd_hm
和 ymd_h
。所有日期时间函数都可以接受类似于 as.POSIXct
或 strptime
的 tz
时区参数,但默认为 UTC
而不是本地时区。
datetime 函数返回类 POSIXct
的对象。
x <- c("20160724 130102","2016/07/23 14:02:01","2016-07-25 15:03:00")
ymd_hms(x, tz="EST")
## [1] "2016-07-24 13:01:02 EST" "2016-07-23 14:02:01 EST"
## [3] "2016-07-25 15:03:00 EST"
ymd_hms(x)
## [1] "2016-07-24 13:01:02 UTC" "2016-07-23 14:02:01 UTC"
## [3] "2016-07-25 15:03:00 UTC"
解析器功能
lubridate
还包括三个函数,用于使用 as.POSIXct
或 strptime
等格式化字符串解析日期时间:
功能 | 输出等级 | 格式化接受的字符串 |
---|---|---|
parse_date_time |
POSIXct | 灵活。将接受 strptime 风格的% 或 lubridate 日期时间函数名称样式,例如 ymd hms 。将接受异构数据的订单向量并猜测哪个是合适的。 |
parse_date_time2 |
默认 POSIXct; 如果 lt = TRUE ,POSIXlt |
严格。仅接受来自有限集合的 strptime 令牌(有或没有% )。 |
fast_strptime |
默认 POSIXlt; 如果 lt = FALSE ,POSIXct |
严格。只接受来自限定套装的分隔符(- ,/ ,: 等)的% 分隔的 strptime 代币。 |
x <- c('2016-07-22 13:04:47', '07/22/2016 1:04:47 pm')
parse_date_time(x, orders = c('mdy Imsp', 'ymd hms'))
## [1] "2016-07-22 13:04:47 UTC" "2016-07-22 13:04:47 UTC"
x <- c('2016-07-22 13:04:47', '2016-07-22 14:47:58')
parse_date_time2(x, orders = 'Ymd HMS')
## [1] "2016-07-22 13:04:47 UTC" "2016-07-22 14:47:58 UTC"
fast_strptime(x, format = '%Y-%m-%d %H:%M:%S')
## [1] "2016-07-22 13:04:47 UTC" "2016-07-22 14:47:58 UTC"
parse_date_time2
和 fast_strptime
使用快速 C 解析器来提高效率。
有关格式化标记,请参阅 ?parse_date_time
。