从 R 中的 GMT 转换时考虑夏令时
Posted
技术标签:
【中文标题】从 R 中的 GMT 转换时考虑夏令时【英文标题】:Account for daylight savings when converting from GMT in R 【发布时间】:2014-04-01 20:55:35 【问题描述】:我已经在 *** 上搜索了大约 2 个小时,但我似乎无法回答这个非常基本的问题。不确定这是我期望的工作方式还是 R 是问题所在。我在这里没有找到这个特定的问题,但是如果它已记录在案并且我在过去几个小时内没有找到它,请发布该问题的链接,因为我没有找到它!
我一直在使用这个网站,http://www.timeanddate.com/worldclock/timezone.html?n=250&syear=2000,作为告诉我夏令时 (DST) 何时生效的指南。
我在冬季的 UTC-5 或 EST 以及夏季的 UTC-4 或 EDT - 加拿大/东部时区。
我有在格林威治标准时间收集的数据,我想将它们转换为当地时间,考虑夏令时。我制作了一个测试数据框(“tzs”,如下)。根据我工作的网站,“DT”列显示 GMT 的日期和时间,Localtime 列显示当地时间应该是什么。
我尝试了以下更改:
带底座:
attr(tzs$DT, "tzone") <- "Canada/Eastern"
含润滑脂:
tzs$DT <- with_tz(tzs$DT, tz = "Canada/Eastern")
我已经尝试了许多不同的时区,例如 EST5EDT、EST 等。似乎没有一个以夏令时所需的更改结束(例如,当我应用更改时,DT 并不总是等于 LocalTime)。
我在手动输入的“LocalTime”字段中预期错误的日期/时间吗?还是 R 的转换方式实际上存在一些错误?
这是我的测试data.frame:
> 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")
【问题讨论】:
【参考方案1】:问题在于 DST 发生在当地时区的指定时间。您的示例预计加拿大/东部的 DST 将在格林威治标准时间凌晨 2 点生效。
【讨论】:
我担心是这样的。如果是这种情况,我会试一试,然后删除这个问题......在这里可以接受吗? @EricaN:没有必要删除你的问题......但没有人会阻止你。 :)以上是关于从 R 中的 GMT 转换时考虑夏令时的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2008 函数将 GMT 时间转换为 AEST 并采用夏令时