проблема с часовым поясом в R, я хочу использовать UTC + 0100 даже летом, хотя CET автоматически переключается на CEST

У меня есть некоторые данные с отметками времени POSIXct в «CET» (Центральноевропейское время = Зимнее время = UTC + 0100) и «CEST» (Центральноевропейское летнее время = UTC + 0200). Поскольку у меня были некоторые проблемы с графиками и расчетами из-за перехода на летнее время, я хочу, чтобы все временные метки были в формате UTC + 0100.

Вот пример моих отметок времени при переключении обратно на зимний день:

> tdf$time_posix_vec[1:20]
[1] "2015-10-25 00:00:00 CEST" "2015-10-25 00:15:00 CEST" "2015-10-25 00:30:00 CEST" "2015-10-25 00:45:00 CEST" "2015-10-25 01:00:00 CEST"
 [6] "2015-10-25 01:15:00 CEST" "2015-10-25 01:30:00 CEST" "2015-10-25 01:45:00 CEST" "2015-10-25 02:00:00 CEST" "2015-10-25 02:15:00 CEST"
[11] "2015-10-25 02:30:00 CEST" "2015-10-25 02:45:00 CEST" "2015-10-25 02:00:00 CET"  "2015-10-25 02:15:00 CET"  "2015-10-25 02:30:00 CET" 
[16] "2015-10-25 02:45:00 CET"  "2015-10-25 03:00:00 CET"  "2015-10-25 03:15:00 CET"  "2015-10-25 03:30:00 CET"  "2015-10-25 03:45:00 CET" 

Чтобы продемонстрировать проблему, я выбрал временную метку в качестве примера:

> tx <- tdf$time_posix_vec[7]
> tx
[1] "2015-10-25 01:30:00 CEST"

Я уже пробовал функцию with_tz lubridate, но если я использую ее с "CET", происходит следующее:

> with_tz(tx, tzone = "CET")
[1] "2015-10-25 01:30:00 CEST"

Я предполагаю, что обработчик часового пояса знает, что в моем местоположении CET становится CEST между последней неделей марта и последней неделей октября.

Чтобы решить эту проблему, я мог бы использовать часовой пояс Алжира, поскольку Алжир использует CET без перехода на летнее время (как мне сказала википедия). Однако это может измениться в будущем, и

Интересно, будет ли это решение из-за этого немного небезопасным?

> with_tz(tx, tzone = "Africa/Algiers")
[1] "2015-10-25 00:30:00 CET"

Я подумал, что лучше всего будет использовать "UTC + 1", но поведение with_tz прямо противоположно тому, что я ожидал:

> with_tz(tx, tzone = "UTC+1")
[1] "2015-10-24 22:30:00 UTC"

чтобы получить 00:30:00, мне нужно было бы использовать:

> with_tz(tx, tzone = "UTC-1")
[1] "2015-10-25 00:30:00 UTC"

но тогда и метка «UTC» неверна, потому что в UTC это было бы

> with_tz(tx, tzone = "UTC")
[1] "2015-10-24 23:30:00 UTC"
  • Почему «UTC + 1» переключает метку времени на UTC-0100 вместо UTC + 0100?
  • И есть ли функция, которая принудительно устанавливает метку времени на UTC + 0100, а также дает метку правильного часового пояса для метки времени, поэтому результат будет "2015-10-25 00:30:00 UTC+1"?

Заранее спасибо,

привет Питер


person Peter_St    schedule 04.05.2016    source источник
comment
Вы можете попробовать преобразовать в POSIXlt, указав желаемый часовой пояс, а затем преобразовать обратно в POSIXct, по-прежнему указав желаемый часовой пояс. Не лучший, но потенциально можно обойтись. Я обнаружил, что часовой пояс устанавливается с tz = во время импорта, это предотвращает многие проблемы в дальнейшем.   -  person Dave2e    schedule 05.05.2016
comment
Привет, Дэйв, спасибо за ответ.   -  person Peter_St    schedule 12.07.2016


Ответы (1)


Думаю, я нашел решение: теперь использую

t1 <- as.POSIXct("2016-07-12 17:43","Etc/GMT-1") 

Например. Меня смутило, что GMT-1 это то же самое, что UTC+0100, они, кажется, переворачивают знак в часовых поясах в стиле bsd.

person Peter_St    schedule 12.07.2016