DateTimeRuby 中的和类有什么区别Time,哪些因素会导致我选择其中一个?
DateTime
Time
较新版本的 Ruby (2.0+) 在这两个类之间并没有真正的显着差异。由于历史原因,一些库会使用其中一种,但不一定需要关注新代码。选择一个以保持一致性可能是最好的,因此请尝试与您的库所期望的相结合。例如,ActiveRecord 更喜欢 DateTime。
在 Ruby 1.9 之前的版本和许多系统上,时间表示为一个 32 位有符号值,描述自 1970 年 1 月 1 日 UTC 以来的秒数,一个围绕 POSIX 标准time_t值的薄包装器,并且是有界的:
time_t
Time.at(0x7FFFFFFF) # => Mon Jan 18 22:14:07 -0500 2038 Time.at(-0x7FFFFFFF) # => Fri Dec 13 15:45:53 -0500 1901
较新版本的 Ruby 能够处理更大的值而不会产生错误。
DateTime 是一种基于日历的方法,其中单独存储年、月、日、小时、分钟和秒。这是一个 Ruby on Rails 构造,用作 SQL 标准 DATETIME 字段的包装器。这些包含任意日期,并且几乎可以表示任何时间点,因为表达式的范围通常非常大。
DateTime.new # => Mon, 01 Jan -4712 00:00:00 +0000
所以令人放心的是,DateTime 可以处理来自亚里士多德的博客文章。
选择一个时,差异现在有些主观。从历史上看,DateTime 提供了以日历方式操作它的更好选项,但其中许多方法也已移植到 Time 中,至少在 Rails 环境中是这样。