Почему дата эпохи верна, но не работает как смещение для объектов POSIXct? - PullRequest
0 голосов
/ 06 января 2012

У меня есть вектор объектов POSIXct:

> dates <- seq(as.POSIXct("2004-01-01", tz="EST"), as.POSIXct("2004-01-02", tz="EST"), as.difftime(6, units="hours"))
> dates
[1] "2004-01-01 00:00:00 EST" "2004-01-01 06:00:00 EST"
[3] "2004-01-01 12:00:00 EST" "2004-01-01 18:00:00 EST"
[5] "2004-01-02 00:00:00 EST"

Я создаю переменную epoch, которая определяет объект POSIXct для эпохи UNIX :

> epoch <- strptime("1970-01-01 00:00:00", "%Y-%m-%d %H:%M:%S", tz="EST")
> class(epoch)
[1] "POSIXct" "POSIXt"  
> epoch
[1] "1970-01-01 EST"

Затем я перебираю вектор dates и распечатываю значение со смещением от epoch:

> for (d in dates) { print(as.POSIXct(d, origin=epoch, tz="EST")) }
[1] "2004-01-01 05:00:00 EST"
[1] "2004-01-01 11:00:00 EST"
[1] "2004-01-01 17:00:00 EST"
[1] "2004-01-01 23:00:00 EST"
[1] "2004-01-02 05:00:00 EST"

Кажется, существует пятичасовая ошибка смещения между значениями в dates и представлением тех же значений относительно epoch.

Существует разница в +5 часов между EST и UTC, но я указал часовой пояс EST для epoch с опцией tz. Распечатывая epoch, кажется, что нет информации о времени, только дата.

Есть ли ошибка с strptime или as.POSIXct, или я вычисляю смещение или неправильно генерирую epoch?

1 Ответ

1 голос
/ 06 января 2012

Как уже упоминалось в ответе на Для того, чтобы стиль цикла влиял на приведение классов? , в цикле for ваши даты конвертируются в числа.Это количество секунд со «стандартной» эпохи.Это включает 5-часовую смену между EST и UTC.Это добавляется как смещение к вашему epoch.Смотрите источник as.POSIXct.numeric.

Следующее работает, потому что оно устанавливает даты, которые будут правильным числом секунд при преобразовании в числовые значения.

...