DateTime.now还是Time.now?

Zab*_*bba 33 ruby time timezone ruby-on-rails

我应该在Rails应用程序中使用哪两个:

DateTime.now or Time.now
Run Code Online (Sandbox Code Playgroud)

在申请中使用两者有什么危害吗?

在上述(now)示例的情况下,两者之间是否会有任何差异?(在我目前的系统中,他们都显示相同的时间)

Yar*_*rin 45

(Date)Time.current而不是 (Date)Time.now

Rails扩展了TimeDateTime对象,并包含current用于检索Rails环境设置为(default = UTC)的时间的属性,而不是服务器时间(可能是任何东西).

这很关键 - 除了在用户输入或显示的时区之间进行转换时,您应始终使用UTC时间,但许多生产系统默认不是 UTC.(例如Heroku设置为PST(GMT -8))

请看这里的文章

  • @ajahongir Time.current返回Time.zone.now如果设置了区域,如果没有,则返回Time.now (2认同)

sla*_*dau 13

参考Time.now(不DateTime.now):

创建的对象将使用系统时钟上可用的分辨率创建,因此可能包括小数秒.

a = Time.new      #=> Wed Apr 09 08:56:03 CDT 2003
b = Time.new      #=> Wed Apr 09 08:56:03 CDT 2003
a == b            #=> false
"%.6f" % a.to_f   #=> "1049896563.230740"
"%.6f" % b.to_f   #=> "1049896563.231466"
Run Code Online (Sandbox Code Playgroud)


Kur*_*ton 6

如果你想在应用程序的时区获得时间,你需要打电话Time.zone.now,这就是我通常使用的.

Time.now并且DateTime.now都将返回系统时间的时间,通常设置为UTC.

  • 可替代地使用(日期)[Time.current](https://github.com/rails/rails/blob/ffc273577a795bb41068bfc2a1bb575ec51a9712/activesupport/lib/active_support/core_ext/time/calculations.rb#L29),如通过Yarin建议.Time.current将返回Time.zone.now如果设置了Time.zone,则返回Time.now. (3认同)