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


R as.POSIX* 日期時間轉換函數


R語言 as.POSIX* 位於 base 包(package)。

說明

用於操作表示日曆日期和時間的"POSIXlt""POSIXct" 類對象的函數。

用法

as.POSIXct(x, tz = "", ...)
as.POSIXlt(x, tz = "", ...)

## S3 method for class 'character'
as.POSIXlt(x, tz = "", format,
           tryFormats = c("%Y-%m-%d %H:%M:%OS",
                          "%Y/%m/%d %H:%M:%OS",
                          "%Y-%m-%d %H:%M",
                          "%Y/%m/%d %H:%M",
                          "%Y-%m-%d",
                          "%Y/%m/%d"),
           optional = FALSE, ...)
## Default S3 method:
as.POSIXlt(x, tz = "",
           optional = FALSE, ...)
## S3 method for class 'numeric'
as.POSIXlt(x, tz = "", origin, ...)

## S3 method for class 'Date'
as.POSIXct(x, tz = "UTC", ...)
## S3 method for class 'Date'
as.POSIXlt(x, tz = "UTC", ...)
## S3 method for class 'numeric'
as.POSIXct(x, tz = "", origin, ...)

## S3 method for class 'POSIXlt'
as.double(x, ...)

參數

x

R要轉換的對象。

tz

一個字符串。用於轉換的時區規範(如果需要)。係統特定(請參閱 time zones ),但 "" 是當前時區,"GMT" 是 UTC(協調世界時)。無效值通常被視為 UTC,在某些平台上會出現警告。

...

要傳遞給其他方法或從其他方法傳遞的進一步參數。

format

給出 strptime 使用的日期時間格式的字符串。

tryFormats

如果未指定 format,則要嘗試的 character 向量 format 字符串。

optional

logical 表示如果格式猜測不成功,則返回 NA(而不是發出錯誤信號)。

origin

日期時間對象,或者可以被強製的東西as.POSIXct(tz = "GMT")對於這樣的一個物體。可選自R4.3.0,相當於"1970-01-01"被使用。

細節

as.POSIX* 函數將對象轉換為用於表示日期/時間的兩個類之一(日曆日期加上精確到秒的時間)。他們可以將其他類和"Date" 類的對象轉換為這些類。沒有時間的日期被視為 UTC 午夜。

它們還可以轉換 "2001-02-03""2001/02/03" 格式的字符串(可選後跟空格和時間),格式為 "14:52""14:52:03" 。 (諸如 "01/02/03" 之類的格式不明確,但可以通過 strptime 的格式規範進行轉換。)允許使用小數秒。或者,可以為字符向量或因子指定 format:如果未指定並且沒有標準格式適用於所有非 NA 輸入,則會引發錯誤。

如果指定了 format,請記住某些格式規範是 locale-specific,並且您可能需要通過 Sys.setlocale 適當設置 LC_TIME 類別。這通常會影響 %a%A (工作日名稱)、 %b%B (月份名稱)和 %p (上午/下午)的使用。

邏輯 NA 可以轉換為任一類,但不能轉換為其他邏輯向量。

如果給您一個數字時間作為自紀元以來的秒數,請參閱示例。

字符輸入首先由 strptime 轉換為類 "POSIXlt" :數字輸入首先轉換為 "POSIXct" 。需要在兩個日期時間類之間進行的任何轉換都需要時區:從 "POSIXlt""POSIXct" 的轉換將驗證所選時區中的時間。一個問題是夏令時轉換時會發生什麽,例如在英國

as.POSIXct(strptime("2011-03-27 01:30:00", "%Y-%m-%d %H:%M:%S"))
as.POSIXct(strptime("2010-10-31 01:30:00", "%Y-%m-%d %H:%M:%S"))

分別是無效(時鍾在 1:00 GMT 前進到 2:00 BST)和不明確(時鍾在 2:00 BST 向後退到 1:00 GMT)。在這種情況下發生的情況是特定於操作係統的:人們應該期望第一個是 NA ,但第二個可以解釋為 BST 或 GMT (常見操作係統給出這兩種可能的值)。另請注意(請參閱strftime),操作係統工具可能無法正確格式化無效時間。

as.POSIXctas.POSIXlt 返回相應類的對象。如果指定了tzas.POSIXlt 將給出適當的"tzone" 屬性。已知無效的 Date-times 將作為 NA 返回。

注意

使用的一些概念必須向後延伸(據說用法是‘proleptic’)。例如,"POSIXct" 類的時間原點“1970-01-01 00:00.00 UTC”是在定義 UTC 之前。更重要的是,轉換是假設 1582 年引入的公曆進行的,直到 20 世紀才使用near-universally。 ISO 8601:2004 假設的重新解釋之一是存在零年,盡管當前年份編號(和零)是一個較晚的概念(525 CE 表示從 1 CE 開始的年份編號)。

未來時間的 "POSIXlt""POSIXct" 之間的轉換是推測性的(UTC 除外)。主要的不確定性在於 DST 的使用和轉換(大多數係統將假定當前規則的延續,但這些規則可能會在短時間內更改)。

如果您想提取時間的特定方麵(例如星期幾),隻需將其轉換為類 "POSIXlt" 並提取列表的相關組件,或者如果您想要字符表示(例如命名的星期幾)使用 format 方法。

如果需要時區並且指定的時區在您的係統上無效,則發生的情況是特定於係統的,但嘗試設置它可能會被忽略。

從字符轉換需要找到一種合適的格式,除非提供了一種格式(通過依次嘗試通用格式):對於長輸入來說,這可能會很慢。

例子


(z <- Sys.time())             # the current datetime, as class "POSIXct"
unclass(z)                    # a large integer
floor(unclass(z)/86400)       # the number of days since 1970-01-01 (UTC)
(now <- as.POSIXlt(Sys.time())) # the current datetime, as class "POSIXlt"
str(unclass(now))             # the internal list ; use now$hour, etc :
now$year + 1900               # see ?DateTimeClasses
months(now); weekdays(now)    # see ?months; using LC_TIME locale

## suppose we have a time in seconds since 1960-01-01 00:00:00 GMT
## (the origin used by SAS)
z <- 1472562988
# ways to convert this
as.POSIXct(z, origin = "1960-01-01")                # local
as.POSIXct(z, origin = "1960-01-01", tz = "GMT")    # in UTC

## SPSS dates (R-help 2006-02-16)
z <- c(10485849600, 10477641600, 10561104000, 10562745600)
as.Date(as.POSIXct(z, origin = "1582-10-14", tz = "GMT"))

## Stata date-times: milliseconds since 1960-01-01 00:00:00 GMT
## format %tc excludes leap-seconds, assumed here
## For format %tC including leap seconds, see foreign::read.dta()
z <- 1579598122120
op <- options(digits.secs = 3)
# avoid rounding down: milliseconds are not exactly representable
as.POSIXct((z+0.1)/1000, origin = "1960-01-01")
options(op)

## Matlab 'serial day number' (days and fractional days)
z <- 7.343736909722223e5 # 2010-08-23 16:35:00
as.POSIXct((z - 719529)*86400, origin = "1970-01-01", tz = "UTC")

as.POSIXlt(Sys.time(), "GMT") # the current time in UTC

## These may not be correct names on your system
as.POSIXlt(Sys.time(), "America/New_York")  # in New York
as.POSIXlt(Sys.time(), "EST5EDT")           # alternative.
as.POSIXlt(Sys.time(), "EST" )   # somewhere in Eastern Canada
as.POSIXlt(Sys.time(), "HST")    # in Hawaii
as.POSIXlt(Sys.time(), "Australia/Darwin")


tab <- file.path(R.home("share"), "zoneinfo", "zone1970.tab")
if(file.exists(tab)) { # typically on Windows; *not* on Linux
  cols <- c("code", "coordinates", "TZ", "comments")
  tmp <- read.delim(tab,
                    header = FALSE, comment.char = "#", col.names = cols)
  if(interactive()) View(tmp)
  head(tmp, 10)
}

也可以看看

DateTimeClasses了解課程詳情; strptime 用於與字符表示形式之間的轉換。

Sys.timezone 了解時區(係統特定)命名的詳細信息。

locales 用於locale-specific 方麵。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Date-time Conversion Functions。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。