gpt4 book ai didi

ruby-on-rails - 解析日期时间字符串以转换为不同格式时,Ruby on Rails 出现无效日期错误

转载 作者:数据小太阳 更新时间:2023-10-29 08:18:31 24 4
gpt4 key购买 nike

在我的 Rails 应用程序(Rails 2.3.14 和 Ruby 1.8.7)中,我试图将日期时间字符串转换为不同的格式以在我的 MySQL 数据库中执行搜索,但我得到了一个无效日期 错误,我似乎无法弄清楚为什么,我已经阅读了很多类似的问题,但我似乎仍然无法解决问题。

# check if filter contains a time stamp
if params[:sSearch].include?('/') and params[:sSearch].include?(':')
datetime = DateTime.strptime(params[:sSearch], "%Y-%m-%d %H:%M")
params[:sSearch] = datetime
end

示例场景

04/11/13 16:14

应该转换为

2013-11-04 16:14

我认为这可能与这样一个事实有关,即秒数未包含在字符串的前端表示中,因为数据库表中的精确 datetime2013 -11-04 16:14:52 所以我现在包括了秒数,但仍然出现相同的错误,我认为这不重要,因为我使用的是带通配符的 LIKE 操作数在搜索词的两边,所以即使没有秒数它也应该有效。

最佳答案

您应该在格式中使用斜杠并将 %Y(四位数年份)替换为 %y(缩写为两位数年份)以获得所需的结果。此外,日期字段的顺序是相反的。正确的格式是:

"%d/%m/%y %H:%M"

我认为您混淆了 strptimestrftime 的用途。 strptime 中的 p 代表“解析”(从 String 生成 DateTime),f strftime中的代表“格式”(反方向)。

require 'date'

DateTime.strptime("04/11/13 16:14", "%Y-%m-%d %H:%M")
# ArgumentError: invalid date

DateTime.strptime("04/11/13 16:14", "%d/%m/%Y %H:%M")
#=> #<DateTime: 0013-11-04T16:14:00+00:00 ((1722836j,58440s,0n),+0s,2299161j)>
# Wrong! You do not want the year 0013, but 2013

DateTime.strptime("04/11/13 16:14", "%d/%m/%y %H:%M")
#=> #<DateTime: 2004-11-13T16:14:00+00:00 ((2453323j,58440s,0n),+0s,2299161j)>
# Correct

您稍后可以使用 DateTime#strftime 将其转换为所需的格式,如下所示:

# parse the user input to a DateTime object
datetime = DateTime.strptime("04/11/13 16:14", "%d/%m/%y %H:%M")

# reformat it
params[:sSearch] = datetime.strftime("%Y-%m-%d %H:%M")

关于ruby-on-rails - 解析日期时间字符串以转换为不同格式时,Ruby on Rails 出现无效日期错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20639254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com