You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby:将带时间的日期字符串转为YYYY-MM-DD格式时遇无效日期错误

解决Ruby日期字符串转换无效日期错误

你的问题出在格式字符串的占位符使用错误,导致无法匹配目标日期字符串,具体问题点和修复方案如下:

错误原因

  1. 你用了%M占位符,但它代表的是分钟,而你需要匹配的是月份全称(如December),正确的月份全称占位符是%B;
  2. %i不是有效的日期/时间占位符,分钟的正确占位符是%M;
  3. 时间部分的分隔符是.,格式字符串里需要对应这个符号,不能用错误的占位符替代。

修复方案

方案1:仅提取日期部分(推荐,因为你只需要YYYY-MM-DD)

直接匹配日期字符串中的日期部分,忽略时间:

current_date = "December 21, 2022 04.00 AM"
# 正确的日期格式字符串
date_format = "%B %e, %Y"
# 转换为Date对象并输出YYYY-MM-DD格式
new_date = Date.strptime(current_date, date_format).iso8601
# 输出结果:"2022-12-21"

方案2:先处理完整带时间的字符串

如果需要先解析完整的时间字符串,使用DateTime类更稳妥(Date类主要处理日期,对带时间的字符串支持有限):

require 'date'
current_date = "December 21, 2022 04.00 AM"
# 正确的带时间格式字符串
date_format_time = "%B %e, %Y %l.%M %p"
# 解析为DateTime后转成Date,再输出目标格式
new_date = DateTime.strptime(current_date, date_format_time).to_date.iso8601
# 输出结果:"2022-12-21"

关键占位符说明

  • %B:月份全称(如January、December)
  • %e:月份中的日期(1-31,带前导空格)
  • %Y:4位年份
  • %l:12小时制的小时(1-12,带前导空格)
  • %M:分钟(00-59)
  • %p:AM/PM标识

内容的提问来源于stack exchange,提问作者user20940255

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:10:50