2017-05-20 18 views
1

我想從lubridate包使用stamp格式化日期輸出。我想最終的格式類似於使用lubridate的戳記日期格式是選擇錯誤的固定格式

週日,11月1日23:15

我的問題越來越成爲印非縮寫月份

library(lubridate) 
x <- ymd_hm("2017-11-20 15:15") 

現在,如果我如下使用stamp然後我幾乎得到正確的輸出

stamp("Sunday, November 30, 23:15")(x) 
Multiple formats matched: "%A, %B %d, %y:%H"(1), "%A, %B %y, %d:%H"(1), "Sunday, %B %d, %y:%H"(1), "Sunday, %B %y, %d:%H"(1) 
Using: "%A, %B %d, %y:%H" 
[1] "Monday, November 20, 17:15" 

然而,11月被解釋爲固定文本,並且猜測格式使用年份和小時代替小時和分鐘。如果我添加了orders參數,那麼我可以試着給力的輸入

stamp("Sunday, Nov 30, 23:15", orders="AbdHM")(x) 
Multiple formats matched: "%A, %Om %d, %H:%M"(0), "%A, %b %d, %H:%M"(1) 
Using: "%A, %Om %d, %H:%M" 
[1] "Monday, 11 20, 15:15" 

這裏的輸出是正確的,除了我得到的一個月爲一個數字而不是文字的順序。請注意,stamp確實提供了正確的格式,但最終使用不太正確的格式,儘管它們被賦予了相同的匹配。

我能做些什麼來強制stamp使用我提供的確切格式?

[除了使用stamp之外,還有其他選項。我只是想不出爲什麼上面的代碼不工作]

回答

0

我發佈了相同的問題GitHublubridate程序包開發人員。原來上面描述的格式錯誤是一個現在已經修復的錯誤。我會在這裏添加答案,因爲lubridate的(當前)文檔沒有提供很多關於orderslocale參數的信息。

如果您有版本1.6.0.9009或lubridate高於我現在得到

stamp("Sunday, Nov 30, 23:15", orders="AbdHM")(x) 
Multiple formats matched: "%A, %b %d, %H:%M"(1), "%A, %Om %d, %H:%M"(0) 
Using: "%A, %b %d, %H:%M" 
[1] "Monday, Nov 20, 15:15" 

這是根據需要(注意縮寫的月份)。如果語言環境或時區給出的,則最近的lubridate版本可以

stamp("Sunday, November 1, 16:15", orders="ABdHM")(force_tz(x, "Europe/Copenhagen")) 
Multiple formats matched: "%A, %B %d, %H:%M"(1), "%A, %Om %d, %H:%M"(0) 
Using: "%A, %B %d, %H:%M" 
[1] "Monday, November 20, 15:15" 

也可以得到正確的輸出通過設置locale說法。

stamp("Sunday, November 30, 23:15", "ABdHM", locale = "en_DK.utf8")