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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。