timeDate
在GMT时区存储一些美国假期。由于夏令时格林威治标准时间和美国时区之间的差异全年不同,美国假期不应存储在格林尼治标准时间区域。
这可能会带来一些问题。例如:
library(timeDate)
holidayEIA <- function(x){ c(holidayNYSE(x),
USColumbusDay(x)@Data,
USVeteransDay(x)@Data)}
HolidaysEIA <- holidayEIA (2015)
#Output:
NewYork
[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] [2015-10-11 20:00:00] [2015-11-10 19:00:00]
此处holidayNYSE
位于EST / EDT时区,而USColumbusDay
和USVeteransDay
位于GMT时区。必须执行以下操作才能均衡:
library(timeDate)
holidayEIA <- function(x){ c(holidayNYSE(x),
USColumbusDay(x)@Data+ 14400,
USVeteransDay(x)@Data+ 18000)}
HolidaysEIA <- holidayEIA (2015)
#Output
NewYork
[1] [2015-01-01] [2015-01-19] [2015-02-16] [2015-04-03] [2015-05-25]
[6] [2015-07-03] [2015-09-07] [2015-11-26] [2015-12-25] [2015-10-12]
[11] [2015-11-11]
这不是一个真正的问题,但鉴于SO是Q&amp; A网站,请允许我将其标记为一个。您是否同意timeDate
应该在当地时区存储假期,以及在同一时区存储每个国家的所有假期?
答案 0 :(得分:1)
我对R的工作并不多,但我会解决你问题的这一部分:
您是否同意timeDate应该在当地时区存储假期,以及在同一时区存储每个国家的所有假期?
没有。从根本上说,假期不应属于当地时区,也不属于格林威治标准时间,也不属于任何其他时区。在绝大多数情况下,假期的发生只是一个日历日期,包括年,月和日期。
在具有多个时区(如美国)的国家/地区观察假期时,将时间存储在当地时区是没有意义的。同样地,世界各地许多不同的人都会看到圣诞节或新年这样的假期是没有意义的。
然而,当某个人观察假期时,您可以获取该个人的当前时区,将其应用于日历日期,并计算时间在一天的开始和第二天的开始。这些值一起构成半开区间[start, end)
,描述当地“日”如何映射到世界时。
请记住,并非所有当地时间都在午夜开始。某些时区的夏令时转换不包括午夜时段,从23:59:59到01:00:00有一个春季前进。
考虑以下示例:
2017-10-15
。[2017-10-15T01:00-02:00, 2017-10-16T00:00-02:00)
,而马瑙斯的同一个假期是[2017-10-15T00:00-04:00, 2017-10-16T00:00-04:00)
。[2017-10-15T03:00Z, 2017-10-16T02:00Z)
,但在马瑙斯,[2017-10-15T04:00Z, 2017-10-16T04:00Z)
。从这一点我们可以看出,“天”的概念对于每个人来说都不一样,无论是绝对的开始和结束,还是持续时间。