使用%b格式化日期

时间:2019-05-15 15:00:56

标签: r date-format strptime

在标记为重复项之前,我尝试了其他一些解决方案,即:

R, strptime(), %b, trying to convert character to date format

strptime, as.POSIXct and as.Date return unexpected NA

但似乎都不适合我。


我正在尝试将时间格式Dec-18转换为POSIXct时间(在这种情况下将为2018-12-01)。我正在尝试将strptime%b%y结合使用,以达到以下目的:

> strptime("Dec-18", format = "%b-%y")
[1] NA

但是显然它不起作用。我正在阅读有关“语言环境”之类的信息,但是上述解决方案对我不起作用。我尝试了以下操作:

> Sys.setlocale("LC_TIME", "C")
[1] "C"
> strptime("Dec-18", format = "%b-%y")
[1] NA

还建议使用此语言环境Sys.setlocale("LC_TIME", "en_GB.UTF-8"),但尝试使用此语言环境时出现错误:

> Sys.setlocale("LC_TIME", "en_GB.UTF-8")
[1] ""
Warning message:
In Sys.setlocale("LC_TIME", "en_GB.UTF-8") :
  OS reports request to set locale to "en_GB.UTF-8" cannot be honored

对此不知所措。基于此,我的缩写月份似乎正确:

> month.abb
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"

这是我正在运行的R版本:

R version 3.5.3 (2019-03-11) -- "Great Truth"
Copyright (C) 2019 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

谢谢。

3 个答案:

答案 0 :(得分:1)

最简单的解决方案是

library(zoo)
as.Date(as.yearmon("Dec-18", "%b-%y"))
#[1] "2018-12-01"

OP的代码中的问题是strptimeas.Date也需要一天的时间。如果不存在,则日期的格式不完整。一种选择是每天paste strptime一天

strptime(paste0("Dec-18", "-01"), format = "%b-%y-%d")
#[1] "2018-12-01 EST"

答案 1 :(得分:1)

使用lubridate,您可以执行以下操作:

parse_date_time("Dec-18", "my")

[1] "2018-12-01 UTC"

答案 2 :(得分:1)

最简单的解决方案是:

as.Date(x = paste0("01-", "Dec-18"),
        format = "%d-%b-%y")
#> [1] "2018-12-01"

format(x = as.Date(x = paste0("01-", "Dec-18"),
                   format = "%d-%b-%y"),
       format = "%b-%y")
#> [1] "Dec-18"

reprex package(v0.2.1)于2019-05-15创建

R无法将12月18日识别为日期。添加一个01-,以便它可以将其检测为日期,然后根据需要显示。