当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R readr parse_datetime 解析日期/时间


解析日期/时间

用法

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() 的格式规范。元素分为三种类型:

  1. 日期部分用"%" 后跟一个字母来指定。例如,"%Y" 匹配 4 位数的年份,"%m" 匹配 2 位数的月份,"%d" 匹配 2 位数的日期。如果不存在,例如仅给出年份,则月份和日期默认为 1 (即 Jan 1 日)。

  2. 空白是零个或多个空白字符的任何序列。

  3. 任何其他字符都完全匹配。

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/collectors.R

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Parse date/times。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。