解析日期/时间
用法
parse_datetime(
x,
format = "",
na = c("", "NA"),
locale = default_locale(),
trim_ws = TRUE
)
parse_date(
x,
format = "",
na = c("", "NA"),
locale = default_locale(),
trim_ws = TRUE
)
parse_time(
x,
format = "",
na = c("", "NA"),
locale = default_locale(),
trim_ws = TRUE
)
col_datetime(format = "")
col_date(format = "")
col_time(format = "")
参数
- x
-
要解析的日期的字符向量。
- format
-
格式规范,如下所述。如果设置为“”,则日期时间将解析为 ISO8601,日期和时间使用
locale()
中指定的日期和时间格式。与
strptime()
不同,格式规范必须匹配完整的字符串。 - na
-
要解释为缺失值的字符串的字符向量。将此选项设置为
character()
以指示没有缺失值。 - locale
-
区域设置控制默认值因地而异。默认区域设置为 US-centric(如 R),但您可以使用
locale()
创建自己的区域设置来控制默认时区、编码、小数标记、大标记和日/月名称等内容。 - trim_ws
-
在解析每个字段之前是否应该删除前导和尾随空格(ASCII 空格和制表符)?
值
POSIXct()
向量,其中 tzone
属性设置为 tz
。无法解析(或未生成有效日期)的元素将被设置为 NA
,并且一条警告消息将通知您失败的总数。
格式规范
readr
使用类似于 strptime()
的格式规范。元素分为三种类型:
-
日期部分用"%" 后跟一个字母来指定。例如,"%Y" 匹配 4 位数的年份,"%m" 匹配 2 位数的月份,"%d" 匹配 2 位数的日期。如果不存在,例如仅给出年份,则月份和日期默认为
1
(即 Jan 1 日)。 -
空白是零个或多个空白字符的任何序列。
-
任何其他字符都完全匹配。
parse_datetime()
识别以下格式规范:
-
年份:"%Y"(4 位数字)。 "%y"(2 位数字); 00-69 -> 2000-2069,70-99 -> 1970-1999。
-
月份:"%m"(2 位数字)、"%b"(当前区域设置中的缩写名称)、"%B"(当前区域设置中的全名)。
-
日:"%d"(2 位数字)、"%e"(可选前导空格)、"%a"(当前语言环境中的缩写名称)。
-
小时:"%H" 或 "%I" 或 "%h",在 AM/PM 中使用 I(而不是 H),如果您的时间表示持续时间超过一天,则使用 h(而不是 H)。
-
分钟:"%M"
-
秒:"%S"(整数秒)、"%OS"(部分秒)
-
时区:"%Z"(作为名称,例如"America/Chicago")、"%z"(作为与 UTC 的偏移量,例如"+0800")
-
上午/下午指示器:"%p"。
-
非数字:"%." 跳过一个非数字字符,"%+" 跳过一个或多个非数字字符,"%*" 跳过任意数量的非数字字符。
-
自动解析器:"%AD"使用灵活的YMD解析器进行解析,"%AT"使用灵活的HMS解析器进行解析。
-
自 Unix 纪元以来的时间:"%s" 自 Unix 纪元以来的十进制秒数。
-
快捷键:"%D" = "%m/%d/%y"、"%F" = "%Y-%m-%d"、"%R" = "%H:%M"、"%T" = "%H:%M:%S"、"%x" = "%y/%m/%d" .
ISO8601支持
目前,readr 并不支持全部 ISO8601。缺少的函数:
-
周和工作日规格,例如"2013-W05"、"2013-W05-10"。
-
序数日期,例如"2013-095"。
-
使用逗号代替句点作为小数分隔符。
解析器也比 ISO8601 宽松一些:
-
日期和时间可以用空格分隔,而不仅仅是 T。
-
大多数正确的规范,例如“2009-05-19 14:”和"200912-01"都有效。
也可以看看
其他解析器:col_skip()
, cols_condense()
, cols()
, parse_factor()
, parse_guess()
, parse_logical()
, parse_number()
, parse_vector()
例子
# Format strings --------------------------------------------------------
parse_datetime("01/02/2010", "%d/%m/%Y")
#> [1] "2010-02-01 UTC"
parse_datetime("01/02/2010", "%m/%d/%Y")
#> [1] "2010-01-02 UTC"
# Handle any separator
parse_datetime("01/02/2010", "%m%.%d%.%Y")
#> [1] "2010-01-02 UTC"
# Dates look the same, but internally they use the number of days since
# 1970-01-01 instead of the number of seconds. This avoids a whole lot
# of troubles related to time zones, so use if you can.
parse_date("01/02/2010", "%d/%m/%Y")
#> [1] "2010-02-01"
parse_date("01/02/2010", "%m/%d/%Y")
#> [1] "2010-01-02"
# You can parse timezones from strings (as listed in OlsonNames())
parse_datetime("2010/01/01 12:00 US/Central", "%Y/%m/%d %H:%M %Z")
#> [1] "2010-01-01 18:00:00 UTC"
# Or from offsets
parse_datetime("2010/01/01 12:00 -0600", "%Y/%m/%d %H:%M %z")
#> [1] "2010-01-01 18:00:00 UTC"
# Use the locale parameter to control the default time zone
# (but note UTC is considerably faster than other options)
parse_datetime("2010/01/01 12:00", "%Y/%m/%d %H:%M",
locale = locale(tz = "US/Central")
)
#> [1] "2010-01-01 12:00:00 CST"
parse_datetime("2010/01/01 12:00", "%Y/%m/%d %H:%M",
locale = locale(tz = "US/Eastern")
)
#> [1] "2010-01-01 12:00:00 EST"
# Unlike strptime, the format specification must match the complete
# string (ignoring leading and trailing whitespace). This avoids common
# errors:
strptime("01/02/2010", "%d/%m/%y")
#> [1] "2020-02-01 UTC"
parse_datetime("01/02/2010", "%d/%m/%y")
#> Warning: 1 parsing failure.
#> row col expected actual
#> 1 -- date like %d/%m/%y 01/02/2010
#> [1] NA
# Failures -------------------------------------------------------------
parse_datetime("01/01/2010", "%d/%m/%Y")
#> [1] "2010-01-01 UTC"
parse_datetime(c("01/ab/2010", "32/01/2010"), "%d/%m/%Y")
#> Warning: 2 parsing failures.
#> row col expected actual
#> 1 -- date like %d/%m/%Y 01/ab/2010
#> 2 -- valid date 32/01/2010
#> [1] NA NA
# Locales --------------------------------------------------------------
# By default, readr expects English date/times, but that's easy to change'
parse_datetime("1 janvier 2015", "%d %B %Y", locale = locale("fr"))
#> [1] "2015-01-01 UTC"
parse_datetime("1 enero 2015", "%d %B %Y", locale = locale("es"))
#> [1] "2015-01-01 UTC"
# ISO8601 --------------------------------------------------------------
# With separators
parse_datetime("1979-10-14")
#> [1] "1979-10-14 UTC"
parse_datetime("1979-10-14T10")
#> [1] "1979-10-14 10:00:00 UTC"
parse_datetime("1979-10-14T10:11")
#> [1] "1979-10-14 10:11:00 UTC"
parse_datetime("1979-10-14T10:11:12")
#> [1] "1979-10-14 10:11:12 UTC"
parse_datetime("1979-10-14T10:11:12.12345")
#> [1] "1979-10-14 10:11:12 UTC"
# Without separators
parse_datetime("19791014")
#> [1] "1979-10-14 UTC"
parse_datetime("19791014T101112")
#> [1] "1979-10-14 10:11:12 UTC"
# Time zones
us_central <- locale(tz = "US/Central")
parse_datetime("1979-10-14T1010", locale = us_central)
#> [1] "1979-10-14 10:10:00 CDT"
parse_datetime("1979-10-14T1010-0500", locale = us_central)
#> [1] "1979-10-14 10:10:00 CDT"
parse_datetime("1979-10-14T1010Z", locale = us_central)
#> [1] "1979-10-14 05:10:00 CDT"
# Your current time zone
parse_datetime("1979-10-14T1010", locale = locale(tz = ""))
#> [1] "1979-10-14 10:10:00 UTC"
相关用法
- R readr parse_number 灵活地解析数字
- R readr parse_vector 解析字符向量。
- R readr parse_guess 使用“最佳”类型进行解析
- R readr parse_factor 解析因子
- R readr parse_atomic 解析逻辑数、整数和实数
- R readr problems 检索解析问题
- R readr datasource 创建源对象。
- R readr melt_delim 返回分隔文件中每个标记的熔化数据(包括 csv 和 tsv)
- R readr read_rds 读/写 RDS 文件。
- R readr read_lines 从文件中读取/写入行
- R readr read_fwf 将固定宽度文件读入 tibble
- R readr read_builtin 从包中读取内置对象
- R readr Tokenizers 分词器。
- R readr melt_table 返回空格分隔文件中每个标记的熔化数据
- R readr date_names 创建或检索日期名称
- R readr type_convert 重新转换现有 DataFrame 中的字符列
- R readr locale 创建语言环境
- R readr write_delim 将数据帧写入分隔文件
- R readr with_edition 暂时更改活动阅读器版本
- R readr read_delim 将分隔文件(包括 CSV 和 TSV)读入 tibble
- R readr format_delim 将 DataFrame 转换为分隔字符串
- R readr edition_get 检索当前活动版本
- R readr readr_example 获取 readr 示例的路径
- R readr melt_fwf 返回固定宽度文件中每个标记的熔化数据
- R readr count_fields 计算文件每一行中的字段数
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Parse date/times。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。