У меня есть некоторые данные с отметками времени 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"
?
Заранее спасибо,
привет Питер