将Time.now转换为ActiveSupport :: TimeZone

时间:2018-07-03 09:07:11

标签: ruby-on-rails ruby timezone

除非已登录,否则我的网站具有使用用户系统时间的功能。

尝试测试此功能时出现问题,因为Time.now.zone给了我该区域的字符串表示形式,而不是ActiveSupport::TimeZone对象。

我从Time.now.zone得到的那个也不能用来查找时区:

Time.now.zone
 => 'BST'

在我需要的时候

 => #<ActiveSupport::TimeZone:0x00007ffe1afd9470 @name="Europe/London", @utc_offset=nil, @tzinfo=#<TZInfo::DataTimezone: Europe/London>>

2 个答案:

答案 0 :(得分:2)

使用Time.zone代替Time.now.zone

答案 1 :(得分:0)

感谢@Stefan,我对Time.now的误解已得到解决,它报告了服务器的机器时间,而不是用户的机器时间,这当然是有道理的。值得庆幸的是,在进行测试时,我可以假定客户端和服务器在同一台计算机上,因此这不是一个大问题。

我也设法找到了解决我原来问题的方法。我正在寻找的方法是getlocal,它将DateTime对象转换为系统时间(如上所述,这就是服务器时间,在测试中可以)。这使得测试可以同时在CircleCI和本地通过。