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


R as.Date 日期与字符之间的转换函数


R语言 as.Date 位于 base 包(package)。

说明

在字符表示和表示日历日期的 "Date" 类对象之间进行转换的函数。

用法

as.Date(x, ...)
## S3 method for class 'character'
as.Date(x, format, tryFormats = c("%Y-%m-%d", "%Y/%m/%d"),
        optional = FALSE, ...)
## S3 method for class 'numeric'
as.Date(x, origin, ...)
## S3 method for class 'POSIXct'
as.Date(x, tz = "UTC", ...)

## S3 method for class 'Date'
format(x, ...)

## S3 method for class 'Date'
as.character(x, ...)

参数

x

要转换的对象。

format

character 字符串。如果未指定,它将在第一个非 NA 元素上逐个尝试 tryFormats,如果都不起作用,则给出错误。否则,处理是通过 strptime() 进行的,其帮助页面说明了可用的转换规范。

tryFormats

如果未指定 format,则要尝试的 character 向量 format 字符串。

optional

logical 表示如果格式猜测不成功,则返回 NA(而不是发出错误信号)。

origin

Date 对象,或者可以被 as.Date(origin, ...) 强制转换为此类对象或 missing 的对象。在这种情况下,使用"1970-01-01"

tz

时区名称。

...

从其他方法传递或向其他方法传递的更多参数,包括用于 as.characteras.Date 方法的 format

细节

通常的向量回收规则适用于 xformat,因此答案的长度将是向量中较长者的长度。

在适当且可用的情况下使用 Locale-specific 与字符串之间的转换。这会影响日期和月份的名称。

as.Date方法接受字符串、因子、逻辑NA和类的对象"POSIXlt""POSIXct"。 (最后一个通过忽略指定时区时间表示中的午夜之后的时间来转换为天,默认为 UTC。)也是类的对象"date"(来自包装日期) 和"dates"(来自包装计时)。根据指定格式的需要来处理字符串:忽略任何尾随字符。

as.Date将接受数字数据(自纪元以来的天数),因为R4.3.0还时origin未提供。

formatas.character 方法忽略日期的任何小数部分。

formatas.character 方法返回表示日期的字符向量。 NA 日期返回为 NA_character_

as.Date 方法返回 "Date" 类的对象。

从其他系统转换

大多数系统在内部将日期记录为自某个来源以来的天数,但这充满了问题,包括

  • 起始日是第 0 天还是第 1 天?正如“示例”所示,Excel 设法为其两个日期系统使用这两种选择。

  • 如果起源足够早,设计者可能会表现出他们对日历系统的无知。例如,Excel 的设计者认为 1900 年是闰年(声称复制了早期 DOS 电子表格中的错误),Matlab 的设计者选择了不存在的日期“January 0, 0000”(没有这样的一天),没有指定日历。 (ISO 8601:2004 中使用的“公历”日历中有这样一个年份,但这确实表明它只能在信息交换双方同意的情况下用于 1582 年之前的年份。)

唯一安全的程序是检查其他系统值的已知日期:互联网上的报告(包括R-help)错误多于正确。

注意

默认格式遵循 ISO 8601 国际标准的规则,将一天表示为 "2001-02-03"

如果日期字符串未完整指定日期,则返回的答案可能是系统特定的。最常见的行为是假设缺失的年、月或日就是当前的年、月或日。如果指定的日期不正确,可靠的实现将给出错误,并且日期将报告为NA。不幸的是一些常见的实现(例如‘⁠glibc⁠’)是不可靠的并且猜测其预期含义。

1CE(又名 1AD)之前的几年可能无法正确处理。

例子


## locale-specific version of the date
format(Sys.Date(), "%a %b %d")

## read in date info in format 'ddmmmyyyy'
## This will give NA(s) in some locales; setting the C locale
## as in the commented lines will overcome this on most systems.
## lct <- Sys.getlocale("LC_TIME"); Sys.setlocale("LC_TIME", "C")
x <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")
z <- as.Date(x, "%d%b%Y")
## Sys.setlocale("LC_TIME", lct)
z

## read in date/time info in format 'm/d/y'
dates <- c("02/27/92", "02/27/92", "01/14/92", "02/28/92", "02/01/92")
as.Date(dates, "%m/%d/%y")

## date given as number of days since 1900-01-01 (a date in 1989)
as.Date(32768, origin = "1900-01-01")
## Excel is said to use 1900-01-01 as day 1 (Windows default) or
## 1904-01-01 as day 0 (Mac default), but this is complicated by Excel
## incorrectly treating 1900 as a leap year.
## So for dates (post-1901) from Windows Excel
as.Date(35981, origin = "1899-12-30") # 1998-07-05
## and Mac Excel
as.Date(34519, origin = "1904-01-01") # 1998-07-05
## (these values come from http://support.microsoft.com/kb/214330)

## Experiment shows that Matlab's origin is 719529 days before ours,
## (it takes the non-existent 0000-01-01 as day 1)
## so Matlab day 734373 can be imported as
as.Date(734373) - 719529 # 2010-08-23
## (value from
## http://www.mathworks.de/de/help/matlab/matlab_prog/represent-date-and-times-in-MATLAB.html)

## Time zone effect
z <- ISOdate(2010, 04, 13, c(0,12)) # midnight and midday UTC
as.Date(z) # in UTC
## these time zone names are common
as.Date(z, tz = "NZ")
as.Date(z, tz = "HST") # Hawaii

参考

International Organization for Standardization (2004, 1988, 1997, ...) ISO 8601. Data elements and interchange formats - Information interchange - Representation of dates and times. For links to versions available on-line see (at the time of writing) https://www.qsl.net/g1smd/isopdf.htm.

也可以看看

Date了解日期类的详细信息; locales 查询或设置区域设置。

您的系统的帮助页面strftimestrptime查看如何指定它们的格式。 Windows 用户将找不到以下帮助页面strptime:基于‘的代码⁠glibc⁠使用(经过更正),因此支持此处说明的所有格式说明符,但在任何区域设置中都没有替代的数字表示形式或纪元。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Date Conversion Functions to and from Character。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。