在 R 中处理东部标准时间 (EST) 和东部夏令时 (EDT)

Dealing with Eastern Standard Time (EST) and Eastern Daylight Savings (EDT) in R

我有一系列来自水质连续监测探测器的数据集,日期和时间设置为东部标准时间 (EST),因此没有夏令时 (EDT) 校正。在 R 中,当从 MS 访问数据库导入数据 table 时,字段被识别为因素,但是当使用 as.POSIXct() 日期和时间从 2016 年的 02:00(24 时钟)转换时03-13 成为 NA。这是由于从 EST 到 EDT 的过渡...因此从技术上讲 2016-03-13 02:00 不存在。

以创建的一些数据为例

test<-data.frame(Date=rep(as.Date("2016-03-13"),120),Hour=rep(seq(0,23,1),5),Min=rep(seq(0,60,15),24))

有没有办法在保留 EST 时区指定的同时将因子或字符字段转换为 POSIXct 字段?或者有没有办法识别正确的日期和时间并将其转换为 EST 和 EDT?

我转了又转,什么也做不了。我试图转换为 GMT(或 UTC)然后转换回 EST(tz="America/New_York")。我意识到这是一个持续存在的问题,使用日期和时间数据的人,尤其是使用 R 的人会喜欢远离 EDT。

感谢任何帮助...我在这方面束手无策。

在转换为 POSIX 期间,您需要指定时区。看这个例子:

test<-data.frame(Date=rep(as.Date("2016-03-13"),96),Hour=rep(seq(0,23,1), each=4),Min=rep(seq(0,45,15)))
wrong<-as.POSIXct(paste(test$Date, test$Hour, test$Min), format="%Y-%m-%d %H %M")
ans<-as.POSIXct(paste(test$Date, test$Hour, test$Min), format="%Y-%m-%d %H %M", tz="EST")

compare<-cbind(test, wrong, ans)

在向量 "wrong" 中,没有指定时区,因此没有指定 NA,但在第二种情况下指定了东部标准,并给出了所需的结果。

使用 POSIX tz = "America/New_York" 的问题是考虑了夏令时(UTC-4 或 UTC-5),即使基础时间戳存储在 U.S 中.东部标准时间 (UTC-5)。

您应该可以将您的 tz 指定为 Etc/GMT+5。从那里,可以很容易地在美国东部时间、东部当地时间和格林威治标准时间之间进行转换。请注意,在 R 中,UTC 以西的时区用正偏移表示(请参阅 ?timezone 中的时区名称文档)。

以下是一些示例数据(夏令时于 2016 年 3 月 16 日东部时间 2:00 上午生效):

StartTime=as.numeric(as.POSIXct("2016-03-11 0:00:00",format="%Y-%m-%d %H:%M",origin="1970-01-01",tz="Etc/GMT+5"))
EndTime=as.numeric(as.POSIXct("2016-03-15 0:00:00",format="%Y-%m-%d %H:%M",origin="1970-01-01",tz="Etc/GMT+5"))

Interval=15*60  #15-min
data.EST=as.POSIXct(seq(from = StartTime,to = EndTime, by=Interval),origin="1970-01-01",tz="Etc/GMT+5") #generate date stamps

# convert Eastern Standard Time (in R: GMT+5) to local time (accounts for daylight savings):
data.EastCoast<- format(data.EST, tz="America/New_York")

# convert Eastern Standard Time (in R: GMT+5) to UTC/GMT:
data.UTC<- format(data.EST, tz="GMT")

compare.times<-data.frame(data.EST,data.EastCoast,data.UTC)

compare.times[(198:203),]

               data.EST      data.EastCoast            data.UTC
198 2016-03-13 01:15:00   2016-03-13 01:15:00   2016-03-13 06:15:00
199 2016-03-13 01:30:00   2016-03-13 01:30:00   2016-03-13 06:30:00
200 2016-03-13 01:45:00   2016-03-13 01:45:00   2016-03-13 06:45:00
201 2016-03-13 02:00:00   2016-03-13 03:00:00   2016-03-13 07:00:00
202 2016-03-13 02:15:00   2016-03-13 03:15:00   2016-03-13 07:15:00
203 2016-03-13 02:30:00   2016-03-13 03:30:00   2016-03-13 07:30:00

祝你好运!

我 运行 使用不遵守夏令时的水质数据遇到类似问题。我发现有用的解决方法是使用 America/Jamaica 而不是 America/New_York。下面是 GMT 偏移列表和要使用的 tz

  • -4 = America/Virgin
  • -5 = America/Jamaica
  • -6 = America/Regina
  • -8 = Pacific/Pitcairn
  • -9 = Pacific/Gambier
  • -10 = Pacific/Honolulu