是否可以更改POSIXct日期的时区组件?

时间:2017-06-09 10:25:00

标签: r as.date

我有一系列日期存储在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

1 个答案:

答案 0 :(得分:0)

您是否尝试过lubridate个功能? with_tzforce_tz使用时区。