2017-08-02 29 views
0

我想將小時法語時間的字符序列轉換爲POSIXct。
該序列在02:00(CEST => CET)包括一個導致重複輸出時間的dst時鐘改變。設置dst with 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") 

輸出:

"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" 

所需的輸出(注意第二個時區):

"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" 

什麼是一個很好的解決方案,以實現這一目標?
我們可以假設日期是排序的,或者用戶可以提供一個布爾向量(dst:yes/no)來告訴lubridate選擇哪個時區。

回答

0

檢查是否有重複項(從最後)和減去重複值的3600(一秒鐘)。如果你有一個布爾向量,使用它而不是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"