當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。