Ruby检查datetime是否为iso8601并保存

Vic*_*tos 5 ruby datetime ruby-on-rails iso8601

我需要检查DateTime是否采用有效的ISO8601格式.喜欢:#iso8601?

我检查了ruby是否有特定的方法,但我没有找到任何方法.目前我正在date.iso8601 == date检查这个.有没有办法做到这一点?

编辑

解释我的环境,并改变问题的范围.

所以,我的项目将使用js api FullCalendar,这就是我需要iso8601字符串格式的原因.我想知道它是更好或更正确的方式,以正确的格式保存数据库中的日期,或让ActiveRecord完成他们的工作并在我需要时间信息时操作它.

dre*_*cat 8

我不太明白你的问题.我假设你想检查一个DateTime字符串,如果它是一个有效的ISO8601格式日期字符串.如果我错了,请纠正我.

您可以使用类方法Time.iso8601Date.iso8601.要使用它们,您需要从标准库中要求"日期"和"时间"库.一个警告是,从名称中可以看出,它们不是谓词方法(没有?),而是如果输入了错误的字符串,它们会引发带有"无效日期"消息的ArgumentError.因此,您需要添加一个开始救援块.例如.

require 'time'

t = Time.now
time_string = t.rfc2822 # intentionally set to wrong format string
begin
  Time.iso8601(time_string)
  puts "Yeah, correct string"
rescue ArgumentError => e
  puts e
  puts "Nah, wrong string"

end
Run Code Online (Sandbox Code Playgroud)

这比你的"date.iso8601 == date"更冗长.但我发布它是因为不明白你的方法是如何工作的.对我date.iso8601 == date来说永远是假的.我错了吗?

UPDATE

作为更新问题的答案,最好只能将DateTime正常存储在数据库中,并调用iso8601方法来获取ISO8601字符串.要创建DateTime,只需使用Time.iso8601将输入字符串解析为DateTime对象.