R语言含完整月份名称的日期格式转换失败求助
问题原因与解决方案
你的问题根源是R的系统区域设置(locale)不是英文,导致日期解析函数无法识别英文月份全称,进而出现转换失败或解析错误的情况。
验证当前Locale
先运行以下代码查看当前的时间区域设置:
Sys.getlocale("LC_TIME")
如果输出是中文(比如"Chinese (Simplified)_China.936")或其他非英文locale,就会导致英文月份无法被识别。
解决方案1:临时切换到英文Locale
根据你的操作系统,运行对应代码切换时间区域为英文:
- Windows系统:
Sys.setlocale("LC_TIME", "English")
- Linux/macOS系统:
Sys.setlocale("LC_TIME", "en_US.UTF-8")
切换后重新测试你的代码:
- 测试
as.Date转换:
as.Date(c("May/27/2021"), "%B/%d/%Y") # 输出:[1] "2021-05-27"
- 测试
lubridate::mdy转换:
library(lubridate) mdy(c("11/03/2020", "November 3, 2020", "11032020")) # 输出:[1] "2020-11-03" "2020-11-03" "2020-11-03"
解决方案2:局部指定Locale(不修改全局设置)
如果你不想修改全局locale,可以使用lubridate::parse_date_time并指定locale参数,直接针对当前解析任务设置英文环境:
library(lubridate) parse_date_time( x = c("11/03/2020", "November 3, 2020", "11032020"), orders = c("mdy", "mdy", "mdy"), locale = "en_US.UTF-8" ) # 输出:[1] "2020-11-03 UTC" "2020-11-03 UTC" "2020-11-03 UTC"
注意事项
- 临时切换locale只在当前会话有效,关闭R后会恢复默认设置。
- 如果切换locale失败,可能是你的系统没有安装对应的英文语言包,需要先在系统设置中添加英文语言支持。
内容的提问来源于stack exchange,提问作者John legend2
相关产品推荐
相关产品推荐

