我有一系列来自水质连续监测探头的数据集,日期和时间设置在东部标准时间(EST),因此没有校正夏令时(EDT)。在R中,当从MS访问数据库导入数据表时,字段被识别为因子,但是当使用as.POSIXct()进行转换时,2016-03-13上的02:00(24时钟)的日期和时间变为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))
有没有办法将因子或字符字段转换为POSIXct字段,同时保留EST时区指定?或者有没有办法识别并将正确的日期和时间转换为EST和EDT?
我四处走动,无法得到任何工作。我试图转换为GMT(或UTC)然后转换回EST(tz =“America / New_York”)。我意识到这是一个持续的问题,使用日期和时间数据的人,特别是在R中的人会喜欢离开EDT。
任何帮助都表示赞赏......我最终会在这个问题上结束。
答案 0 :(得分:8)
使用POSIX tz = "America/New_York"
的问题在于夏令时(UTC-4或UTC-5),即使基础时间戳存储在美国东部标准时间(UTC-5)。 / p>
您应该能够将您的tz指定为Etc/GMT+5
。从那里,很容易在东部时间,东部当地时间和格林威治标准时间之间进行转换。请注意,在R中,UTC以西的时区用正偏移量表示(请参阅?timezone
中的时区名称文档)。
以下是一些示例数据(夏令时于美国东部时间2016年3月16日凌晨2点生效):
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
祝你好运!
答案 1 :(得分:1)
在转换为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)
在向量“错误”中,没有指定时区,因此NA,但在第二种情况下指定了东方标准,并给出了期望的结果。
答案 2 :(得分:0)
我在使用不遵守夏令时的水质数据时遇到了类似的问题。我发现有用的解决方法是使用 America/Jamaica
而不是 America/New_York
。以下是 GMT 偏移量列表和要使用的 tz
。
America/Virgin
America/Jamaica
America/Regina
Pacific/Pitcairn
Pacific/Gambier
Pacific/Honolulu