gpt4 book ai didi

ruby-on-rails - ActiveRecord 将字符串解析为日期时间?

转载 作者:行者123 更新时间:2023-12-03 21:40:08 25 4
gpt4 key购买 nike

如果我通过 String进入 Datetime在创建新的 AR 对象时,它会自动解析:

1.9.2p290 :011 > Movie.new(:release_date=>"21-Nov-1990")
=> #<Movie id: nil, release_date: "1990-11-21 00:00:00", created_at: nil, updated_at: nil>

怎么样 Rails , 或 ActiveRecord ,做这个魔术吗?它使用哪种方法?

最佳答案

Rails 添加了 to_date 方法 String .它的来源很简单:

# File activesupport/lib/active_support/core_ext/string/conversions.rb, line 42
def to_date
return nil if self.blank?
::Date.new(*::Date._parse(self, false).values_at(:year, :mon, :mday))
end
Date._parse是 Ruby 原生的(相同的方法由 Date.parse 调用),它是 where the real work is done .

它首先使用正则表达式从字符串中删除无关的符号,然后将其传递给其他方法,例如 _parse_eu , _parse_iso , _parse_dot等等。每一个都使用自己的正则表达式和其他方法来查看它是否是它理解的日期并从中提取有意义的信息。一旦其中一个“工作”(即返回true),其余的将被跳过。最后,回到 _parse ,提取的信息用于构建日期和时间,做更多的工作来确定诸如检查星期几以及“12”的年份值应该表示 1912 还是 2012 之类的事情。

文档将其称为启发式方法,这可以理解为它在墙上抛出了一堆可能性,看看什么是有效的。它的记录很差,但效果非常好。

关于ruby-on-rails - ActiveRecord 将字符串解析为日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9725044/

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