Ruby 历史闰日的错误
我正在处理一些不准确的历史数据,由于原始数据的不确定性,我的团队不希望修复这些数据。其中一个问题是错误记录的日期解析为无效:Ruby 历史闰日的错误,ruby,date,Ruby,Date,我正在处理一些不准确的历史数据,由于原始数据的不确定性,我的团队不希望修复这些数据。其中一个问题是错误记录的日期解析为无效: > Date.parse('1876-02-29') => Tue, 29 Feb 1876 vs 是否有任何现成的方法可以忽略无效日期错误来获取日期对象?这可能会导致当前或未来数据库中的验证问题吗?对于这个应用程序,我倾向于将日期作为整数处理。因为您没有描述要用什么日期替换无效的日期数据,所以任何日期都应该有效(如果这不是您想要的,那么您没有完全描述问题就
> Date.parse('1876-02-29')
=> Tue, 29 Feb 1876
vs
是否有任何现成的方法可以忽略无效日期错误来获取日期对象?这可能会导致当前或未来数据库中的验证问题吗?对于这个应用程序,我倾向于将日期作为整数处理。因为您没有描述要用什么日期替换无效的日期数据,所以任何日期都应该有效(如果这不是您想要的,那么您没有完全描述问题就是错的)。只需执行
Date.new
即可创建日期对象
require "date"
begin
Date.parse('1877-02-29')
rescue ArgumentError
Date.new
end
# => #<Date: -4712-01-01 ((0j,0s,0n),+0s,2299161j)>
需要“日期”
开始
解析日期('1877-02-29')
挽救错误
日期:新
结束
# => #
使用字符串Luke(或者更好地与客户交谈)
坏数据就是坏数据,没有该领域的好数据,客户的业务逻辑能工作吗
如果是,那么甚至不要期望它是一个真正的日期,将其编码为字符串,并在业务逻辑需要时将其抛出到日期,但如果它出现故障,则需要修复的是客户机的数据,而不是您的代码,事实上,它出现故障更像是一个功能,而不是一个bug
如果客户真的需要好的数据,那么客户就应该在您的帮助下以某种方式修复这些数据
接下来的问题是,如果一些日期明显无效,有多少是错误的,只是看起来有效
唯一比某件事不起作用时更可怕的事情应该是当某件事起作用时,它不应该起作用
这些是被解析的,还是被拒绝的?您希望它为
-290-99-48
或9999-99-99
返回什么?若你们的数据有问题,我发现留下一个单独的列和原始值作为源数据的记录会有很大的帮助,它们会被拒绝。我们的数据集非常小(~6000)并且没有增长,我们没有任何其他错误类型,因此它们不(也不会)包含其他错误类型。另一列是一个好主意-可能是搜索的更正值,我在对质量有问题的数据进行转换时的经验法则是始终保留原始数据的记录。这样,您就可以回溯到源代码,找到任何错误并修复它们,而不必费神地想知道在转换过程中有多少数据被破坏了。如果您手头有修复任何系统性问题的工具,您可以随时重新转换。如果您想添加有关如何修复问题的注释,那么像您所说的注释栏甚至更好。例如,OCR数据是出了名的糟糕,你基本上必须手工修复它。如果你只有6000条记录,为什么不打印出无效的日期,然后手工一次更正一条呢?否则,您将花费数小时对坏记录进行编码。
require "date"
begin
Date.parse('1877-02-29')
rescue ArgumentError
Date.new
end
# => #<Date: -4712-01-01 ((0j,0s,0n),+0s,2299161j)>