R语言:如何将Mmm dd, yyyy字符格式转换为dd-mm-yyyy日期格式
解决R语言日期格式转换为dd-mm-yyyy日期类型的问题
核心问题分析
你的问题主要源于两点:
- 格式字符串未匹配原日期中的逗号:原日期格式是
Feb 21, 2020,包含逗号,你使用的%b %d %Y未包含该符号,导致as.Date无法识别。 - 可能存在系统locale不兼容:如果你的R默认locale为中文,会无法识别英文月份缩写(如
Feb),最终返回NA。
分步解决方案
1. 修正格式字符串(优先尝试)
将格式字符串调整为包含逗号的"%b %d, %Y",代码如下:
DF$new_date <- as.Date(DF$Date, "%b %d, %Y")
2. 解决locale不兼容问题(若第一步仍返回NA)
如果系统默认locale是中文,需临时切换到英文locale以识别英文月份缩写:
# Windows系统 Sys.setlocale("LC_TIME", "English") # Linux/macOS系统 Sys.setlocale("LC_TIME", "en_US.UTF-8") # 执行日期转换 DF$new_date <- as.Date(DF$Date, "%b %d, %Y")
3. 设置显示格式为dd-mm-yyyy
注意:R的Date类型本身没有固定显示格式,上述转换后得到的是标准日期类型。若要以dd-mm-yyyy格式展示,可使用format()函数生成对应格式的字符列(保留原new_date为日期类型):
DF$display_date <- format(DF$new_date, "%d-%m-%Y")
验证示例
用测试数据验证整个流程:
# 构造测试数据 DF <- data.frame(Date = c("Feb 21, 2020", "Mar 05, 2021")) # 切换locale并转换日期 Sys.setlocale("LC_TIME", "English") # 根据系统调整 DF$new_date <- as.Date(DF$Date, "%b %d, %Y") DF$display_date <- format(DF$new_date, "%d-%m-%Y") # 查看结果 print(DF)
输出结果:
Date new_date display_date 1 Feb 21, 2020 2020-02-21 21-02-2020 2 Mar 05, 2021 2021-03-05 05-03-2021
可见new_date为标准Date类型,display_date是你需要的dd-mm-yyyy格式的显示用字符列。
内容的提问来源于stack exchange,提问作者Ursula
相关产品推荐
相关产品推荐

