使用 lubridate 的时间戳日期格式选择了错误的固定格式
Stamped date format using lubridate is selecting the wrong fixed format
我正在尝试使用 lubridate
包中的 stamp
格式化日期输出。我希望结束格式类似于
Sunday, November 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"
但是,November 被解释为固定文本,并且猜测的格式使用年份和小时代替小时和分钟。如果我添加 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
,还有其他选择。我只是想不通为什么上面的代码不起作用]
我在 GitHub 上向 lubridate
包开发人员发布了同样的问题。事实证明,上述格式错误是一个错误,现已修复。我将在此处添加答案,因为 lubridate
的(当前)文档没有提供有关 orders
和 locale
参数的大量信息。
如果您有 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")
我正在尝试使用 lubridate
包中的 stamp
格式化日期输出。我希望结束格式类似于
Sunday, November 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"
但是,November 被解释为固定文本,并且猜测的格式使用年份和小时代替小时和分钟。如果我添加 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
,还有其他选择。我只是想不通为什么上面的代码不起作用]
我在 GitHub 上向 lubridate
包开发人员发布了同样的问题。事实证明,上述格式错误是一个错误,现已修复。我将在此处添加答案,因为 lubridate
的(当前)文档没有提供有关 orders
和 locale
参数的大量信息。
如果您有 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")