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 ),但 |
... |
要傳遞給其他方法或從其他方法傳遞的進一步參數。 |
format |
給出 |
tryFormats |
如果未指定 |
optional |
|
origin |
日期時間對象,或者可以被強製的東西 |
細節
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.POSIXct
和 as.POSIXlt
返回相應類的對象。如果指定了tz
,as.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 as.Date 日期與字符之間的轉換函數
- R as.environment 強製環境對象
- R as.function 將對象轉換為函數
- R as.data.frame 強製數據幀
- R assignOps 賦值運算符
- R asplit 按邊距分割數組/矩陣
- R assign 為名稱分配值
- R apply 在數組邊距上應用函數
- R agrep 近似字符串匹配(模糊匹配)
- R append 向量合並
- R attributes 對象屬性列表
- R abbreviate 縮寫字符串
- R all.equal 測試兩個對象是否(幾乎)相等
- R aperm 數組轉置
- R args 函數的參數列表
- R attr 對象屬性
- R array2DF 將數組轉換為 DataFrame
- R autoload 按需加載包
- R attach 將一組 R 對象附加到搜索路徑
- R all.names 查找表達式中的所有名稱
- R any 有些值是真的嗎?
- R array 多路陣列
- R all 所有的值都是真的嗎?
- R file.path 構造文件路徑
- R grep 模式匹配和替換
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Date-time Conversion Functions。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。