2017-08-02 3 views
0

Je souhaite convertir une séquence de caractères de l'heure française en POSIXct.
Cette séquence comprend un changement d'horloge dst à 02:00 (CEST => CET) qui entraîne des temps de sortie dupliqués.Définir dst avec lubridate

char_dates <- c("2017-10-29 01:00:00", 
       "2017-10-29 02:00:00", 
       "2017-10-29 02:00:00", 
       "2017-10-29 03:00:00") 
ymd_hms(char_dates, tz = "Europe/Paris") 

Sortie:

"2017-10-29 01:00:00 CEST" "2017-10-29 02:00:00 CET" "2017-10-29 02:00:00 CET" "2017-10-29 03:00:00 CET" 

sortie souhaité (note du 2ème fuseau horaire):

"2017-10-29 01:00:00 CEST" "2017-10-29 02:00:00 CEST" "2017-10-29 02:00:00 CET" "2017-10-29 03:00:00 CET" 

Quelle est une bonne solution pour y parvenir?
Nous pouvons supposer que les dates sont triées, ou que l'utilisateur peut fournir un vecteur booléen (dst: oui/non) pour indiquer à lubrifier quel fuseau horaire choisir.

Répondre

0

Vérifiez s'il y a des doublons (à la fin) et soustrayez 3600 (une heure en secondes) pour les valeurs dupliquées. Si vous avez un vecteur de Booléen, utilisez-le au lieu de duplicated(temp, fromLast = TRUE).

char_dates <- c("2017-10-29 01:00:00", 
       "2017-10-29 02:00:00", 
       "2017-10-29 02:00:00", 
       "2017-10-29 03:00:00") 
temp = ymd_hms(char_dates, tz = "Europe/Paris") 
temp[duplicated(temp, fromLast = TRUE)] = temp[duplicated(temp, fromLast = TRUE)] - 3600 
temp 
#[1] "2017-10-29 01:00:00 CEST" "2017-10-29 02:00:00 CEST" "2017-10-29 02:00:00 CET" 
#[4] "2017-10-29 03:00:00 CET"