2016-05-05 3 views
5

У меня есть серия наборов данных из непрерывного контрольного зонда качества воды с датой и временем, установленным в Восточном стандартном времени (EST), поэтому нет коррекция летнего времени (EDT). В R поля распознаются как факторы при импорте таблицы данных из базы данных доступа MS, однако при преобразовании с использованием as.POSIXct() дат и времени с 02:00 (24 часа) в 2016-03-13 становятся НС. Это связано с переходом от EST к EDT ... поэтому технически 2016-03-13 02:00 не существует.Работа с восточным стандартным временем (EST) и восточным летним сбережением (EDT) в R

Некоторые созданы данные в качестве примера

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

Думаю, я мог бы найти работу, но я не уверен на 100%. При преобразовании даты и времени из коэффициента или символа в поле POSIXct использование tz = «Etc/GMT-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))) ' ' as.POSIXct (вставить (test $ Date, test $ Hour, test $ Min), format = "% Y-% m-% d% H% M ", tz =" Etc/GMT-5 ")' –

ответ

3

Проблема с использованием POSIX tz = "America/New_York" заключается в том, что учет летнего времени учитывается (UTC-4 или UTC-5), даже если базовые временные метки хранятся в Восточном стандартном времени США (UTC-5).

Вы должны указать свой tz как Etc/GMT+5. Оттуда легко преобразовать EST, восточное местное время и GMT. Обратите внимание, что в R часовые пояса к западу от UTC обозначаются с положительным смещением (см. Документацию по названиям часовых поясов в ?timezone).

Вот некоторые примеры данных (декретное вступил в силу в 2:00 утра по восточному времени на 3/16/16):

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

Во время преобразования в 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) 

В векторе «неправильный», нет часового пояса не было указано, таким образом, НС, но во втором случае по восточному поясному был определен и желаемый результат дают.

+0

Спасибо за ответ, я прочитал некоторую противоречивую документацию, чтобы указать, что «EST» в R относится к «австралийскому восточному стандартному времени», а не к североамериканскому/канадскому " Восточное стандартное время". Это имеет большое значение, так как «Австралийское восточное стандартное время» - это UTC-10, а «Восточное стандартное время» - UTC-5. Я просто в целом смущенно отношусь к обозначениям часового пояса, так как там так много информации. Любые моменты были бы оценены. –

+0

См. «Timezones» и «OlsonNames»() для списка возможных часовых поясов. Я на восточном побережье и бегу Sys.time() возвращает - «EDT» – Dave2e

+0

Спасибо, я также бегу на восточном побережье США и сделал Sys.time() и получил EDT. Спасибо за руководство по вводу объявлений. –