Dealing with Eastern Standard Time (EST) and Eastern Daylight Savings (EDT) in R
我有一系列来自水质连续监测探头的数据集,日期和时间设置在东部标准时间(EST),因此没有校正夏令时(EDT)。在R中,当从MS访问数据库导入数据表时,字段被识别为因子,但是当使用as.POSIXct()进行转换时,2016-03-13上的02:00(24时钟)的日期和时间变为NA。这是由于从EST到EDT的过渡...因此技术上2016-03-13 02:00不存在。
一些创建数据作为示例
有没有办法将因子或字符字段转换为POSIXct字段,同时保留EST时区指定?或者有没有办法识别并将正确的日期和时间转换为EST和EDT?
我四处走动,无法得到任何工作。我试图转换为GMT(或UTC)然后转换回EST(tz ="America / New_York")。我意识到这是一个持续的问题,使用日期和时间数据的人,特别是在R中的人会喜欢离开EDT。
任何帮助都表示赞赏......我在这个问题上的最终结果。
使用POSIX
您应该能够将您的tz指定为
以下是一些示例数据(夏令时于美国东部时间2016年3月16日凌晨2:00生效):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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 |
祝好运!
在转换为POSIX期间,您需要指定时区。 看这个例子:
1 2 3 4 5 | 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) |
在向量"错误"中,没有指定时区,因此NA,但在第二种情况下,指定了东方标准,并给出了期望的结果。