使用lubridate的戳记日期格式是选择错误的固定格式

问题描述:

我想从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之外,还有其他选项。我只是想不出为什么上面的代码不工作]

我发布了相同的问题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")