使用%B/%b格式转换为POSIXct返回NA问题求助
解决as.POSIXct解析英文月份返回NA的问题
问题根源:你的R当前的**时间区域设置(LC_TIME)**不是英文,导致无法识别英文月份名称(March/Mar)。
%B对应月份全称、%b对应月份缩写,这两个格式的解析依赖系统locale,中文locale下认不出英文月份。而%m是解析数字月份,不依赖locale,所以用数字3就能正常工作。解决方法一:临时切换英文locale
- 先查看当前时间locale:
如果返回类似Sys.getlocale("LC_TIME")"zh_CN.UTF-8",就确认是locale问题。 - 临时切换到英文locale,解析完再切回去(不同系统的英文locale写法略有差异,比如Linux是
"en_US.utf8"):# 保存当前设置 current_locale <- Sys.getlocale("LC_TIME") # 切换到美国英文 Sys.setlocale("LC_TIME", "en_US.UTF-8") # 现在解析日期就正常了 as.POSIXct("1-March-2021 11:45", format="%d-%B-%Y %H:%M") as.POSIXct("1-Mar-2021 11:45", format="%d-%b-%Y %H:%M") # 切回原locale,避免影响其他功能 Sys.setlocale("LC_TIME", current_locale)
- 先查看当前时间locale:
解决方法二:用lubridate包(更省心)
lubridate包的日期解析函数对locale的依赖更低,直接就能识别英文月份:# 先安装包(如果没装过) install.packages("lubridate") library(lubridate) # 解析日期 dmy_hm("1-March-2021 11:45") dmy_hm("1-Mar-2021 11:45")
内容的提问来源于stack exchange,提问作者Roy
相关产品推荐
相关产品推荐

