历史闰日的错误

时间:2016-03-22 01:06:22

标签: ruby date

由于原始数据的不确定性,我处理的某些历史数据存在我的团队不愿修复的不准确之处。其中一个问题是错误记录的日期解析为无效:

> Date.parse('1876-02-29')
=> Tue, 29 Feb 1876

VS

> Date.parse('1877-02-29')
ArgumentError: invalid date

是否有任何开箱即用的方法忽略无效日期错误以获取Date对象?这可能只会导致当前或未来数据库中的验证问题吗?我倾向于将日期视为此应用程序的整数。

2 个答案:

答案 0 :(得分:0)

由于您还没有描述要用无效日期数据替换的日期,因此任何日期都应该有效(如果这不是您想要的,那么您不会完全没有描述问题)。只需执行Date.new即可创建日期对象。

require "date"

begin
  Date.parse('1877-02-29')
rescue ArgumentError
  Date.new
end
# => #<Date: -4712-01-01 ((0j,0s,0n),+0s,2299161j)>

答案 1 :(得分:0)

使用字符串Luke (或者,更好的是,与客户说话)

错误的数据是错误的数据,客户的业务逻辑能否在该字段中没有良好的数据?

如果是,那么甚至不要指望它是一个真实的日期,将其编码为字符串并在业务逻辑需要时将其抛出到日期,但如果它打破了它,那么客户的数据需要修复 - 不是你的代码,它崩溃的事实实际上更像是一个特征而不是一个bug。

如果客户真的需要好的数据,那么客户可以在某种程度上以你的帮助来修复这些数据。

接下来的问题是,如果某些日期明显无效,有多少是错的,只是看似有效?

  

只有在某些东西不起作用的时候才会更加可怕,而且应该是在某些东西起作用的时候,它不应该。