【发布时间】:2016-04-30 00:01:19
【问题描述】:
我需要列出假期清单,其中包括纽约证券交易所假期、哥伦布日和退伍军人节。为此,我使用了timeDate 包,如下所示:
library(timeDate)
years <- 2015
holidayEIA <- function(x){ c(holidayNYSE(x),
as.Date(USColumbusDay(x)),
as.Date(USVeteransDay(x))) }
holidayEIA(years)
输出包括 1969 年的两个日期。它还在日期旁边添加了一个时间。我可以用一行代码去掉时间戳和包含 1969 的元素。然而,宁愿那些从一开始就不在场的人。
#Output
[1] [2015-01-01 00:00:00] [2015-01-19 00:00:00] [2015-02-16 00:00:00]
[4] [2015-04-03 00:00:00] [2015-05-25 00:00:00] [2015-07-03 00:00:00]
[7] [2015-09-07 00:00:00] [2015-11-26 00:00:00] [2015-12-25 00:00:00]
[10] [1969-12-31 23:38:40] [1969-12-31 23:39:10]
如果我分别运行 holidayNYSE(2015)、USColumbusDay(2015) 或 USVeteransDay(2015),则生成的 timeDate 对象没有时间戳,并且没有 1969 年。我不明白为什么将这三个对象一起运行会导致添加时间戳并且在 1969 年的问题上。当然我也可以独立运行这三个并绑定它们。那只是一个补丁;如果可以避免,我宁愿不必这样做。感谢您的帮助。
【问题讨论】:
-
从函数中删除
as.Date()似乎会产生正确的日期,但带有时间戳。这可能是由于时区问题。holidayNYSE指的是纽约,而其他两个是格林威治标准时间。 -
其实看timeDate对象,它有一个属性Data,它有正确的日期值。因此,以
c(holidayNYSE(x), USColumbusDay(x)@Data, USVeteransDay(x)@Data)访问它。仍然是格林威治标准时间。 -
谢谢戈帕拉。这更正了错误的日期(1969 年发行),但仍然得到时间戳。问题是您建议的时区。
timeDate注意到不同的时区并提供“[2015-10-11 20:00:00] [2015-11-10 19:00:00]”作为USColumbusDay(2015)和USVeteransDay(2015)的输出(即移至GMT 时间前一天)。所以猜测没有解决办法,只能单独运行并绑定它们,或者联合运行并消除之后的时间。想把这个作为答案吗? -
是的,这些中没有
tz选项。因此,使用适当的时区剥离或转换为posixct似乎是正确的想法。我认为我没有做太多的事情来写它作为答案。至少,我们想通了。