【问题标题】:R timeDate package - holidays output issueR timeDate 包 - 假期输出问题
【发布时间】: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 似乎是正确的想法。我认为我没有做太多的事情来写它作为答案。至少,我们想通了。

标签: r datetime calendar


【解决方案1】:

这解决了这两个问题:

library(timeDate)
years <- 2015

holidayEIA <- function(x){ c(holidayNYSE(x), 
                             USColumbusDay(x)@Data+ 14400, 
                             USVeteransDay(x)@Data+ 18000)}
holidayEIA(years)

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 2014-05-11
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多