你如何将 POSIX 日期转换为一年中的某一天?
Posted
技术标签:
【中文标题】你如何将 POSIX 日期转换为一年中的某一天?【英文标题】:How do you convert POSIX date to day of year? 【发布时间】:2011-12-18 23:42:08 【问题描述】:标题有:如何将 POSIX 日期转换为日期?
【问题讨论】:
【参考方案1】:data.table
包还提供了一个yday()
函数。
require(data.table)
today <- Sys.time()
yday(today)
【讨论】:
【参考方案2】:我意识到这不是发帖人想要的,但我需要将 POSIX 日期-times 转换为一年中的 小数 天以用于时间序列分析并最终这样做:
today <- Sys.time()
doy2015f<-difftime(today,as.POSIXct(as.Date("2015-01-01 00:00", tzone="GMT")),units='days')
【讨论】:
【参考方案3】:这就是我的做法:
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
不起作用。【参考方案4】:
正如?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()
方法适用于这两种类型。【参考方案5】:
另一种方法是使用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
列的数据集。似乎是时候将您的答案标记为已接受的答案了。
@Gavin,是否也可以将日期转换为自指定数据以来的天数,例如自 2015 年 3 月 1 日以来的天数?我也可以发布一个新问题...
@B.Davis 你可以做类似as.numeric(Sys.Date()-as.Date('2015-03-01',format='%Y-%m-%d'))
以上是关于你如何将 POSIX 日期转换为一年中的某一天?的主要内容,如果未能解决你的问题,请参考以下文章