我有一系列日期存储在class = c(“POSIXct”,“POSIXt”)中。其中一些日期跨越了英国时钟的变化,导致连续几天的时区不同,这在计算日期之间的天数时会产生问题 例如2015年3月29日的时钟变化将时区从GMT转移到BST
"2015-03-29 GMT" "2015-03-30 BST"
我可以强制所有日期进入相同的时区而不会弄乱日期吗?
我尝试过使用as.Date(),当所有日期都在同一时区时工作正常,但是当日期跨越时钟时会导致问题。
这是一个可重复的例子(可能只在英国?):
df2 <- as.data.frame(
structure(
list(DateOfEntry = structure(c(1426809600, 1426896000,
1426982400, 1427068800,
1427155200, 1427241600,
1427328000, 1427414400,
1427500800, 1427587200,
1427670000, 1427756400),
class = c("POSIXct", "POSIXt"),
tzone = "", label = "Date of entry")),
class = "data.frame", .Names = c("DateOfEntry"),
row.names = c(NA, -12L)))
df2$new_date <- as.Date(df2$DateOfEntry)
这导致我的输出(在英国,2015年3月29日时钟更改):
DateOfEntry new_date
2015-03-20 2015-03-20
2015-03-21 2015-03-21
2015-03-22 2015-03-22
2015-03-23 2015-03-23
2015-03-24 2015-03-24
2015-03-25 2015-03-25
2015-03-26 2015-03-26
2015-03-27 2015-03-27
2015-03-28 2015-03-28
2015-03-29 2015-03-29
2015-03-30 2015-03-29
2015-03-31 2015-03-30
请注意重复2015年3月29日和DateofEntry==2015-03-30
&amp;之间的1天差异。 new_date==2015-03-29
答案 0 :(得分:0)
您是否尝试过lubridate
个功能? with_tz
和force_tz
使用时区。