你如何将 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 函数,它只是上述方法的包装。它方便地为其他单元定义了类似的函数(monthyearhour,...)。

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 日期转换为一年中的某一天?的主要内容,如果未能解决你的问题,请参考以下文章

r 从日期字符串中获取一年中的某一天(可能需要调整格式)

我很难从一年中的某一天和自午夜以来的秒数获取日期/时间组件

如何从日期中减去一天?

MySQL中, 如何查询某一天, 某一月, 某一年的数据.

批处理 + 文件 + 一年中的某一天

PHP 某年某月的最后一天