将存储为字符或数字向量的日期转换为 POSIXct 对象。 ymd_hms()
系列函数可识别所有非字母数字分隔符(如果 frac = TRUE
则 "." 除外)并正确处理异构日期时间表示。要更灵活地处理异构格式,请参阅低级解析器 parse_date_time()
。
用法
ymd_hms(
...,
quiet = FALSE,
tz = "UTC",
locale = Sys.getlocale("LC_TIME"),
truncated = 0
)
ymd_hm(
...,
quiet = FALSE,
tz = "UTC",
locale = Sys.getlocale("LC_TIME"),
truncated = 0
)
ymd_h(
...,
quiet = FALSE,
tz = "UTC",
locale = Sys.getlocale("LC_TIME"),
truncated = 0
)
dmy_hms(
...,
quiet = FALSE,
tz = "UTC",
locale = Sys.getlocale("LC_TIME"),
truncated = 0
)
dmy_hm(
...,
quiet = FALSE,
tz = "UTC",
locale = Sys.getlocale("LC_TIME"),
truncated = 0
)
dmy_h(
...,
quiet = FALSE,
tz = "UTC",
locale = Sys.getlocale("LC_TIME"),
truncated = 0
)
mdy_hms(
...,
quiet = FALSE,
tz = "UTC",
locale = Sys.getlocale("LC_TIME"),
truncated = 0
)
mdy_hm(
...,
quiet = FALSE,
tz = "UTC",
locale = Sys.getlocale("LC_TIME"),
truncated = 0
)
mdy_h(
...,
quiet = FALSE,
tz = "UTC",
locale = Sys.getlocale("LC_TIME"),
truncated = 0
)
ydm_hms(
...,
quiet = FALSE,
tz = "UTC",
locale = Sys.getlocale("LC_TIME"),
truncated = 0
)
ydm_hm(
...,
quiet = FALSE,
tz = "UTC",
locale = Sys.getlocale("LC_TIME"),
truncated = 0
)
ydm_h(
...,
quiet = FALSE,
tz = "UTC",
locale = Sys.getlocale("LC_TIME"),
truncated = 0
)
参数
- ...
-
年、月、日、时、分、秒格式的日期字符向量
- quiet
-
合乎逻辑的。如果是
TRUE
,函数将在不显示常规消息的情况下进行计算。 - tz
-
一个字符串,指定使用哪个时区来解析日期。该字符串必须是用户操作系统可识别的时区。
- locale
-
要使用的区域设置,请参阅locales。在 Linux 系统上,您可以使用
system("locale -a")
列出所有已安装的区域设置。 - truncated
-
整数,表示可以缺少多少种格式。查看具体信息。
值
POSIXct 日期时间对象的向量
细节
ymd_hms()
函数自动将通用协调时区 (UTC) 分配给解析的日期。可以使用 force_tz()
更改该时区。
日期时间数据中最常见的不规则类型是由于四舍五入或时间戳不可用而导致的截断。如果 truncated
参数非零,ymd_hms()
函数还会检查截断的格式。例如, ymd_hms()
和 truncated = 3
也会解析不完整的日期,例如 2012-06-01 12:23
、 2012-06-01 12
和 2012-06-01
。注意:ymd()
系列函数基于 base::strptime()
,目前无法解析 %y-%m
格式。
在异构日期格式的情况下,ymd_hms()
系列根据输入向量的子集猜测格式。如果输入向量包含许多缺失值或非日期字符串,则子集可能不包含有意义的日期,并且不会猜测日期时间格式,从而导致 All formats failed to parse
错误。在这种情况下,请参阅parse_date_time()
以获得更灵活的解析接口。
从 1.3.0 版本开始,润滑的解析函数不再返回显示它们用于解析输入的格式的消息。您可以通过设置来更改此设置lubridate.verbose
选项TRUE
和options(lubridate.verbose = TRUE)
.
也可以看看
-
parse_date_time()
底层机制
例子
x <- c("2010-04-14-04-35-59", "2010-04-01-12-00-00")
ymd_hms(x)
#> [1] "2010-04-14 04:35:59 UTC" "2010-04-01 12:00:00 UTC"
x <- c("2011-12-31 12:59:59", "2010-01-01 12:00:00")
ymd_hms(x)
#> [1] "2011-12-31 12:59:59 UTC" "2010-01-01 12:00:00 UTC"
## ** heterogeneous formats **
x <- c(20100101120101, "2009-01-02 12-01-02", "2009.01.03 12:01:03",
"2009-1-4 12-1-4",
"2009-1, 5 12:1, 5",
"200901-08 1201-08",
"2009 arbitrary 1 non-decimal 6 chars 12 in between 1 !!! 6",
"OR collapsed formats: 20090107 120107 (as long as prefixed with zeros)",
"Automatic wday, Thu, detection, 10-01-10 10:01:10 and p format: AM",
"Created on 10-01-11 at 10:01:11 PM")
ymd_hms(x)
#> [1] "2010-01-01 12:01:01 UTC" "2009-01-02 12:01:02 UTC"
#> [3] "2009-01-03 12:01:03 UTC" "2009-01-04 12:01:04 UTC"
#> [5] "2009-01-05 12:01:05 UTC" "2009-01-08 12:01:08 UTC"
#> [7] "2009-01-06 12:01:06 UTC" "2009-01-07 12:01:07 UTC"
#> [9] "2010-01-10 10:01:10 UTC" "2010-01-11 22:01:11 UTC"
## ** fractional seconds **
op <- options(digits.secs=3)
dmy_hms("20/2/06 11:16:16.683")
#> [1] "2006-02-20 11:16:16.683 UTC"
options(op)
## ** different formats for ISO8601 timezone offset **
ymd_hms(c("2013-01-24 19:39:07.880-0600",
"2013-01-24 19:39:07.880", "2013-01-24 19:39:07.880-06:00",
"2013-01-24 19:39:07.880-06", "2013-01-24 19:39:07.880Z"))
#> [1] "2013-01-25 01:39:07.88 UTC" "2013-01-24 19:39:07.88 UTC"
#> [3] "2013-01-25 01:39:07.88 UTC" "2013-01-25 01:39:07.88 UTC"
#> [5] "2013-01-24 19:39:07.88 UTC"
## ** internationalization **
if (FALSE) {
x_RO <- "Ma 2012 august 14 11:28:30 "
ymd_hms(x_RO, locale = "ro_RO.utf8")
}
## ** truncated time-dates **
x <- c("2011-12-31 12:59:59", "2010-01-01 12:11", "2010-01-01 12", "2010-01-01")
ymd_hms(x, truncated = 3)
#> [1] "2011-12-31 12:59:59 UTC" "2010-01-01 12:11:00 UTC"
#> [3] "2010-01-01 12:00:00 UTC" "2010-01-01 00:00:00 UTC"
x <- c("2011-12-31 12:59", "2010-01-01 12", "2010-01-01")
ymd_hm(x, truncated = 2)
#> [1] "2011-12-31 12:59:00 UTC" "2010-01-01 12:00:00 UTC"
#> [3] "2010-01-01 00:00:00 UTC"
## ** What lubridate might not handle **
## Extremely weird cases when one of the separators is "" and some of the
## formats are not in double digits might not be parsed correctly:
if (FALSE) {
ymd_hm("20100201 07-01", "20100201 07-1", "20100201 7-01")}
相关用法
- R lubridate ymd 解析包含年、月、日组件的日期
- R lubridate year 获取/设置日期时间的年份部分
- 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 posix_utils 各种 POSIX 实用程序
- 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等大神的英文原创作品 Parse date-times with year, month, and day, hour, minute, and second components.。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。