首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中处理东部标准时间(EST)和东部夏令储蓄(EDT)

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

Stack Overflow用户
提问于 2016-05-05 14:47:21
回答 3查看 10.4K关注 0票数 8

根据东部标准时间(EST)中设定的时间和数据,从水质连续监测探头中获得了一系列数据集,因此没有夏令时(EDT)的校正。在R中,字段在从MS access数据库导入数据表时被确认为因素,但是当使用as.POSIXct()日期和时间转换时,从2016-03-13的02:00 (24时钟)开始转换为NAs。这是由于从东部时间过渡到EDT...therefore技术2016-03-1302: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))

是否有方法将因子或字符字段转换为as POSIXct字段,同时保留EST时区指定?或者,是否有一种方法来识别并将适当的日期和时间转换为EST和EDT?

我周而复始地走来走去,什么也找不到。我试图转换到格林尼治标准时间(或UTC),然后转换回东部时间(tz=“美国/纽约”)。我意识到这是一个持续的问题,那些处理日期和时间数据的人,特别是在R中的人,很想离开EDT。

任何帮助都是感激的.我在这件事上束手无策。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-21 21:09:39

使用POSIX tz = "America/New_York"的问题在于,即使底层时间戳存储在美国东部标准时间(UTC-5)中,夏时制也会被计算在内(UTC-4或UTC-5)。

您应该能够指定您的tz为Etc/GMT+5。这样,就很容易在东部时间、东部时间和格林尼治时间之间进行转换。注意,在R中,UTC以西的时区用正偏移量表示(请参阅?timezone中的时区名称文档)。

以下是一些示例数据(夏令节约在东部时间3/16/16凌晨2:00生效):

代码语言:javascript
复制
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

祝好运!

票数 12
EN

Stack Overflow用户

发布于 2016-05-05 16:05:51

在转换到POSIX期间,您需要指定时区。参见此示例:

代码语言:javascript
复制
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,但在第二种情况下,指定了东方标准,并给出了所需的结果。

票数 1
EN

Stack Overflow用户

发布于 2021-06-07 21:14:03

我遇到了一个类似的问题,使用不遵守夏令时的水质数据。我发现有用的解决方法是使用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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37053620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档