【发布时间】:2017-06-20 10:01:38
【问题描述】:
我对 Ruby 很陌生,想了解时间比较的最佳实践
我有来自一个对象的expireAt 时间戳,我需要在其中应用一些逻辑并与当前时间进行比较。记住这个背景。
哪种方法更好,
if Time.now.to_i < obj.expireAt
// some logic
end
或
if Time.now < Time.at(obj.expireAt)
// some logic
end
提前致谢!
【问题讨论】:
-
obj.expireAt的类是什么?根据您的代码,它似乎是一个简单的整数。 Ruby 中的最佳实践是首先使对象的该属性成为Time或DateTime的实例,并且在设置该值的任何位置只进行一次转换。然后在您的代码中,您只需执行Time.now < obj.expireAt而不调用to_i或Time.at。 -
obj.expireAt是简单的整数(时间戳)。你能解释一下为什么最好与时间或日期时间进行比较。只是想知道。 -
因为它是自我记录和自包含的。您可以检查一个对象并确定它的类是什么;如果是
Fixnum,那并不能告诉你任何有用的信息。您必须以某种方式知道它是时间戳以及如何将其转换为实际时间值。如果它是Time,那么您不仅知道它是什么,而且您拥有该类的所有方法来操作它。 Ruby 中的一切都是某个类的实例;您不妨使用与您的价值相匹配的那个。 -
@MarkReed 你对此很熟悉。如果您可以添加一个,将接受答案:+1