Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 我应该总是用哪个来解析日期时间?日期时间,时间,时区?_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 我应该总是用哪个来解析日期时间?日期时间,时间,时区?

Ruby on rails 我应该总是用哪个来解析日期时间?日期时间,时间,时区?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,在Rails中,我看到有几个选项可以解析日期和日期时间。为了通过ActiveRecord将日期持久化到数据库中,解析日期的最佳实践是什么?为什么 Time.zone.parse(...) Time.parse(...) DateTime.parse(...) ActiveRecord自动设置的时间(例如,在处创建的时间和在处更新的时间)作为实例返回 根据文档,ActiveSupport::TimeWithZone和Time具有相同的API,因此我将使用Time 另一个不相关的注意事项是,您可以

在Rails中,我看到有几个选项可以解析日期和日期时间。为了通过ActiveRecord将日期持久化到数据库中,解析日期的最佳实践是什么?为什么

Time.zone.parse(...)
Time.parse(...)
DateTime.parse(...)

ActiveRecord自动设置的时间(例如,在处创建的时间和在处更新的时间)作为实例返回

根据文档,
ActiveSupport::TimeWithZone
Time
具有相同的API,因此我将使用
Time

另一个不相关的注意事项是,您可以调用字符串的方法
to_time
to_datetime

"2012-05-09".to_time # => 2012-05-09 00:00:00 UTC 
"2012-05-09".to_datetime # => Wed, 09 May 2012 00:00:00 +0000

如果只想写入ActiveRecord,请使用Time.zone.parse

应该避免使用日期时间。如果您正在处理日期,则应改用Date.parse

除此之外,它还取决于输入是否带有时区信息、当前时区设置为什么以及您是否希望在数据中包含时区

Time.zone.parse将返回ActiveSupport::TimeWithZone,默认为UTC

> Time.zone.parse("12:30")
=> Thu, 10 May 2012 12:30:00 UTC +00:00 
Time.parse将返回一个时间,如果在输入中指定,则返回一个带区域的时间,或者返回本地时间

> Time.parse("12:30")
=> 2012-05-09 12:30:00 -0700 
有关Ruby时间比较和精度的更详细说明,请阅读以下博客:


Time.zone.parse如果Rails应用程序默认为UTC(在environment.rb中),则将“defaults”解析为UTC。。。Time.parse默认为服务器本地时区偏移量,与Rails应用程序无关。嘿,
Time.zone.parse
正确获取Rails默认时区,而DateTime返回UTC。所以+1,但是“应该避免使用DateTime”还有其他原因吗?还有和,也就是说在处理日期或遥远的将来的日期时使用DateTime。