Дата и время импорта в указанном часовом поясе, без учета перехода на летнее время

У меня есть данные временных рядов, полученные из регистратора данных, для которого был установлен один часовой пояс без перехода на летнее время (NZST или UTC + 12: 00), а данные охватывают несколько лет. Регистраторы данных не учитывают изменения летнего времени и синхронизируются по местному времени с / без летнего времени (в зависимости от того, кто его развернул).

Однако, когда я загружаю данные в R, я не могу правильно использовать as.POSIXct, чтобы игнорировать DST. Я использую R 2.14.0 на компьютере с Windows со следующими настройками:

> Sys.timezone()
[1] "NZDT"
> Sys.getlocale("LC_TIME")
[1] "English_New Zealand.1252"

Вот три отметки времени весеннего перехода на летнее время, каждая с интервалом в 1 час:

> ts_str <- c("28/09/2008 01:00", "28/09/2008 02:00", "28/09/2008 03:00")
> as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="")
[1] "2008-09-28 01:00:00 NZST" NA
[3] "2008-09-28 03:00:00 NZDT"
> as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="UTC")
[1] "2008-09-28 01:00:00 UTC" "2008-09-28 02:00:00 UTC"
[3] "2008-09-28 03:00:00 UTC"

Как видите, часы перескочили вперед с 1:59 до 3:00, поэтому 2:00 недопустимы, следовательно, нет данных. Кроме того, я могу использовать tz="UTC", чтобы заставить его игнорировать изменения летнего времени. Однако я бы предпочел сохранить правильный часовой пояс, поскольку у меня есть другие серии данных, записанные с DST (NZDT или UTC + 13: 00), которые я хотел бы смешать (через merge) для своих анализ.

Как настроить параметр tz на компьютере с MS Windows? Я пробовал много вещей, таких как «NZST», «Стандартное время Новой Зеландии», «UTC + 12: 00», «+1200» и т. Д., Но безуспешно. Или мне изменить какой-то другой параметр?


person Mike T    schedule 04.11.2011    source источник


Ответы (2)


Вы можете использовать tz="Etc/GMT+12":

as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="Etc/GMT+12")
[1] "2008-09-28 01:00:00 GMT+12" "2008-09-28 02:00:00 GMT+12"
[3] "2008-09-28 03:00:00 GMT+12"

Для получения полного списка доступных часовых поясов используйте

dir(file.path(R.home("share"),"zoneinfo"), recursive=TRUE)

Там есть пара файлов .tab, которые не являются часовыми поясами, но содержат некоторую информацию, но мое регулярное выражение недостаточно хорошо, чтобы исключить их с помощью аргумента шаблона для dir.

person James    schedule 04.11.2011

Если просто добавить 12 * 60 * 60 к этому вектору, производному от UTC, вы получите местное «стандартное» время.

person IRTFM    schedule 04.11.2011
comment
12 часов? Вы имеете в виду 1 час? т.е. 60 * 60 - person Mike T; 04.11.2011
comment
Вы хотите UTC + 12, правда? - person James; 04.11.2011
comment
@ Майк Тэйвс. Я думал, вы на 12 часов опережаете UTC - person IRTFM; 04.11.2011
comment
ах, я понимаю, да, теперь это имеет смысл - person Mike T; 05.11.2011