Я пытаюсь прочитать 15-минутные данные из CSV. Я борюсь с летним временем, которое, кажется, обнаружено неправильно. Вот небольшая выборка временных меток, которые у меня есть (мой tz = 'Europe / Berlin'). Обратите внимание, что сдвиг времени из-за перехода на летнее время в этом примере составляет от 03:00 до 02:00.
library(lubridate)
library(dplyr)
dt <- c('29.10.2017 01:30 - 29.10.2017 01:45',
'29.10.2017 01:45 - 29.10.2017 02:00',
'29.10.2017 02:00 - 29.10.2017 02:15',
'29.10.2017 02:15 - 29.10.2017 02:30',
'29.10.2017 02:30 - 29.10.2017 02:45',
'29.10.2017 02:45 - 29.10.2017 03:00',## end of daylight savings
'29.10.2017 02:00 - 29.10.2017 02:15',
'29.10.2017 02:15 - 29.10.2017 02:30',
'29.10.2017 02:30 - 29.10.2017 02:45',
'29.10.2017 02:45 - 29.10.2017 03:00')
Моя цель - сохранить начало каждого периода как POSIXct, но сдвиг времени из-за того, что летнее время не помечено правильно, что приводит к дублированию меток времени.
dt <- strsplit(dt, split = ' -') %>% unlist() %>% matrix(byrow = TRUE, ncol = 2)
dtstart <- as_datetime(dt[, 1], format = '%d.%m.%Y %H:%M', tz = "CET")
dtstart
# [1] "2017-10-29 01:30:00 CEST" "2017-10-29 01:45:00 CEST"
# [3] "2017-10-29 02:00:00 CEST" "2017-10-29 02:15:00 CEST"
# [5] "2017-10-29 02:30:00 CEST" "2017-10-29 02:45:00 CEST"
# [7] "2017-10-29 02:00:00 CEST" "2017-10-29 02:15:00 CEST"
# [9] "2017-10-29 02:30:00 CEST" "2017-10-29 02:45:00 CEST"
Моя идея состояла в том, чтобы использовать конец периода, а затем вычесть 15 минут, но снова создаются дубликаты
dtend <- as_datetime(dt[, 2], format = '%d.%m.%Y %H:%M', tz = "CET")
dtend
# [1] "2017-10-29 01:45:00 CEST" "2017-10-29 02:00:00 CEST"
# [3] "2017-10-29 02:15:00 CEST" "2017-10-29 02:30:00 CEST"
# [5] "2017-10-29 02:45:00 CEST" "2017-10-29 03:00:00 CET" ## should be CEST ?
# [7] "2017-10-29 02:15:00 CET" "2017-10-29 02:30:00 CET"
# [9] "2017-10-29 02:45:00 CET" "2017-10-29 03:00:00 CET"
dtend[6]-dtend[10]
# Time difference of 0 secs
Есть ли обходной путь или я что-то делаю не так?