如何用POSIXct将09-Oct-2017格式日期转为09-11-2017格式并修正转换错误?
解决日期格式转换问题
你遇到的问题主要是格式符使用错误,还有对as.POSIXct的format参数理解有点偏差,我来一步步帮你修正:
1. 错误原因分析
你写的format=c("%d-%mm-%Y")有两个问题:
%mm是无效的格式符:对于Oct这种英文月份缩写,应该用%b;%m是用来匹配数字月份(比如11代表11月)的。format参数不需要用c()包裹,它接受单个格式字符串(如果你的日期有多种格式,可以用tryFormats参数,但这里你的日期格式是统一的)。
2. 正确的转换步骤
第一步:将字符串转换为日期/时间对象
首先把09-Oct-2017这样的字符串转换为POSIXct(或更轻量的Date类型):
# 转换为POSIXct类型(带时间,默认时间为00:00:00) q3_dos_log$INSERTED_ON_posix <- as.POSIXct(q3_dos_log$INSERTED_ON, format = "%d-%b-%Y") # 或者如果只需要日期,用Date类型更合适 q3_dos_log$INSERTED_ON_date <- as.Date(q3_dos_log$INSERTED_ON, format = "%d-%b-%Y")
第二步:格式化为你需要的dd-mm-yyyy字符串
如果需要输出09-11-2017这样的数字日期格式,用format()函数处理转换后的日期对象:
# 格式化为日-数字月-年的字符串格式 q3_dos_log$INSERTED_ON_formatted <- format(q3_dos_log$INSERTED_ON_date, "%d-%m-%Y")
3. 额外注意事项
如果你的系统默认locale不是英文,可能会无法识别Oct这种英文月份缩写,这时候需要临时设置英文locale:
# Windows系统 Sys.setlocale("LC_TIME", "English") # Linux/macOS系统 Sys.setlocale("LC_TIME", "en_US.UTF-8")
这样处理后,就能正确完成日期类型转换和格式输出啦!
内容的提问来源于stack exchange,提问作者sana
相关产品推荐
相关产品推荐

