我需要检查DateTime是否采用有效的ISO8601格式。
像:#iso8601?
我检查了ruby是否有特定的方法,但没有找到任何方法。
目前,我正在使用date.iso8601 == date对此进行检查。
有什么好方法吗?

编辑

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

因此,我的项目将使用js api FullCalendar,这就是为什么我需要iso8601字符串格式的原因。而且我想知道哪种方法更好还是更正确,以正确的格式将日期保存在数据库中,或者让ActiveRecord进行工作并在需要时间信息时对其进行操作。

最佳答案

我不太明白你的问题。我假设您要检查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

这比您的“date.iso8601 == date”更为冗长。但是我发布它是因为不了解您的方法是如何工作的。对我来说,date.iso8601 == date永远是错误的。我错了吗?

更新

作为对已更新问题的解答,最好只是将DateTime正常存储在数据库中,然后调用iso8601方法以获取ISO8601字符串。为了创建DateTime,您可以仅使用Time.iso8601将输入字符串解析为DateTime对象。

关于ruby-on-rails - Ruby检查datetime是否为iso8601并保存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31627276/

10-09 01:55