【发布时间】:2011-12-18 23:42:08
【问题描述】:
标题有:如何将 POSIX 日期转换为日期?
【问题讨论】:
标题有:如何将 POSIX 日期转换为日期?
【问题讨论】:
data.table 包还提供了一个yday() 函数。
require(data.table)
today <- Sys.time()
yday(today)
【讨论】:
我意识到这不是发帖人想要的,但我需要将 POSIX 日期-times 转换为一年中的 小数 天以用于时间序列分析并最终这样做:
today <- Sys.time()
doy2015f<-difftime(today,as.POSIXct(as.Date("2015-01-01 00:00", tzone="GMT")),units='days')
【讨论】:
这就是我的做法:
as.POSIXlt(c("15.4", "10.5", "15.5", "10.6"), format = "%d.%m")$yday
# [1] 104 129 134 160
【讨论】:
POSIXlt(如我的回答中所述),但不适用于POSIXct 对象。例如,Sys.time()$yday 不起作用。
正如?POSIXlt 所揭示的,POSIXlt 日期(或什至此类的向量)的 $yday 后缀将转换为一年中的某一天。请注意,POSIX 将 1 月 1 日计为第 0 天,因此您可能希望将 1 添加到结果中。
我花了很长时间才找到这个,所以我想我会ask and answer my own question。
另外,优秀的lubridate 包提供了yday 函数,它只是上述方法的包装。它方便地为其他单元定义了类似的函数(month,year,hour,...)。
today <- Sys.time()
yday(today)
【讨论】:
d 是一个POSIXlt 对象,str(d) 没有表明d 有任何其他属性。这一点,以及 $ 运算符在 POSIXlt 对象的向量上按元素工作意味着不仅仅是通常的提取正在进行。如果有人可以推荐一个不错的起点,我将有兴趣阅读更多相关信息。
attributes 是我正在寻找的命令,attributes(d) 提供了所有显示 d 的方式。
"POSIXlt" 类的对象。另一个主要类是"POSIXct",它以一种非常不同的方式在内部存储。例如,在Sys.time() 的输出上尝试您的方法。 strftime() 方法适用于这两种类型。
另一种方法是使用strftime() 格式化"POSIXt" 对象:
R> today <- Sys.time()
R> today
[1] "2012-10-19 19:12:04 BST"
R> doy <- strftime(today, format = "%j")
R> doy
[1] "293"
R> as.numeric(doy)
[1] 293
这比记住在 POSIX 标准中年日从零开始更好。
【讨论】:
POSIXct 列的数据集。似乎是时候将您的答案标记为已接受的答案了。
as.numeric(Sys.Date()-as.Date('2015-03-01',format='%Y-%m-%d'))