使用 %b 格式化日期时出现 R strptime 问题
R strptime issue when using %b to format a date
在标记为重复之前,我尝试了一些其他解决方案,即这些:
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
但显然是行不通的。我正在阅读有关 "locales" 之类的内容,但上述解决方案对我不起作用。我尝试了以下操作:
> 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)
提前致谢。
最简单的解决方案是
library(zoo)
as.Date(as.yearmon("Dec-18", "%b-%y"))
#[1] "2018-12-01"
OP 代码中的问题是 strptime
或 as.Date
也需要一天。如果不存在,则日期的格式不完整。一种选择是在 strptime
中每天 paste
并且有效
strptime(paste0("Dec-18", "-01"), format = "%b-%y-%d")
#[1] "2018-12-01 EST"
使用 lubridate
,您可以:
parse_date_time("Dec-18", "my")
[1] "2018-12-01 UTC"
最简单的解决方案是:
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
无法将 Dec-18 识别为日期。添加一个01-
,这样它就可以将其检测为日期,然后根据需要显示。
在标记为重复之前,我尝试了一些其他解决方案,即这些:
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
但显然是行不通的。我正在阅读有关 "locales" 之类的内容,但上述解决方案对我不起作用。我尝试了以下操作:
> 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)
提前致谢。
最简单的解决方案是
library(zoo)
as.Date(as.yearmon("Dec-18", "%b-%y"))
#[1] "2018-12-01"
OP 代码中的问题是 strptime
或 as.Date
也需要一天。如果不存在,则日期的格式不完整。一种选择是在 strptime
中每天 paste
并且有效
strptime(paste0("Dec-18", "-01"), format = "%b-%y-%d")
#[1] "2018-12-01 EST"
使用 lubridate
,您可以:
parse_date_time("Dec-18", "my")
[1] "2018-12-01 UTC"
最简单的解决方案是:
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
无法将 Dec-18 识别为日期。添加一个01-
,这样它就可以将其检测为日期,然后根据需要显示。