Переход на летнее время в R - Проблемы с чтением по меткам времени - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь прочитать 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

Есть ли обходной путь или я что-то делаю не так?

...