关于日期时间:从R中转换为GMT时的夏令时帐户

Account for daylight savings when converting from GMT in R

我现在一直在搜索stackoverflow大约2个小时,我似乎无法回答这个非常基本的问题。不确定这是我期望的事情是如何工作或R是问题。我这里没有找到这个具体的问题,但是如果它有记录并且我在最近几个小时内没有找到它,请发布问题的链接,因为我还没找到它!

我一直在使用这个网站http://www.timeanddate.com/worldclock/timezone.html?n=250&syear=2000,作为指导,告诉我夏令时(DST)何时生效。

我在冬天是UTC-5或EST,夏天是UTC - 4或EDT - 加拿大/东部时区。

我有在GMT收集的数据,我想将它们转换为当地时间,占夏令时。我做了一个测试数据帧(下面的"tzs")。根据我正在使用的网站,"DT"列以GMT显示日期和时间,Localtime列显示当地时间应该是什么。

我尝试了以下更改:

有基数:

1
attr(tzs$DT,"tzone") <-"Canada/Eastern"

与lubridate:

1
tzs$DT <- with_tz(tzs$DT, tz ="Canada/Eastern")

我已经尝试了许多不同的时区,例如EST5EDT,EST等。似乎没有对夏令时进行所需的更改(例如,当我应用更改时,DT并不总是等于LocalTime)。

我在手动输入的"LocalTime"字段中期待错误的日期/时间吗?或者R转换的方式实际上有些错误吗?

这是我的测试数据.frame:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
> df
                    DT           Localtime
1  2002-10-27 02:00:00 2002-10-26 21:00:00
2  2003-04-06 01:59:59 2003-04-05 20:59:59
3  2003-04-06 02:00:00 2003-04-05 22:00:00
4  2003-10-26 01:59:59 2003-10-25 21:59:59
5  2003-10-26 02:00:00 2003-10-25 21:00:00
6  2004-04-04 01:59:59 2004-04-03 20:59:59
7  2004-04-04 02:00:00 2004-04-03 22:00:00
8  2004-10-31 01:59:59 2004-10-30 21:59:59
9  2009-11-01 02:00:00 2009-30-31 21:00:00
10 2010-03-14 01:59:59 2010-03-13 20:59:59
11 2010-03-14 02:00:00 2010-03-13 22:00:00
12 2010-11-07 01:59:59 2010-11-06 21:59:59
13 2010-11-07 02:00:00 2010-11-06 21:00:00
14 2011-03-13 01:59:59 2011-03-12 20:59:59
15 2011-03-13 02:00:00 2011-03-12 22:00:00
16 2011-11-06 01:59:59 2011-11-05 21:59:59

tzs <- structure(list(DT = structure(c(1035684000, 1049594399, 1049594400,
1067133599, 1067133600, 1081043999, 1081044000, 1099187999, 1257040800,
1268531999, 1268532000, 1289095199, 1289095200, 1299981599, 1299981600,
1320544799), class = c("POSIXct","POSIXt"), tzone ="GMT"),
    Localtime = structure(c(1L, 2L, 3L, 5L, 4L, 6L, 7L, 8L, 9L,
    10L, 11L, 13L, 12L, 14L, 15L, 16L), .Label = c("2002-10-26 21:00:00",
   "2003-04-05 20:59:59","2003-04-05 22:00:00","2003-10-25 21:00:00",
   "2003-10-25 21:59:59","2004-04-03 20:59:59","2004-04-03 22:00:00",
   "2004-10-30 21:59:59","2009-30-31 21:00:00","2010-03-13 20:59:59",
   "2010-03-13 22:00:00","2010-11-06 21:00:00","2010-11-06 21:59:59",
   "2011-03-12 20:59:59","2011-03-12 22:00:00","2011-11-05 21:59:59"
    ), class ="factor")), .Names = c("DT","Localtime"), row.names = c(NA,
16L), class ="data.frame")

问题是DST发生在本地时区的指定时间。 您的示例预计加拿大/东部的DST将于格林尼治标准时间凌晨2点生效。