除非已登录,否则我的网站具有使用用户系统时间的功能。
尝试测试此功能时出现问题,因为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>>
答案 0 :(得分:2)
使用Time.zone
代替Time.now.zone
答案 1 :(得分:0)
感谢@Stefan,我对Time.now
的误解已得到解决,它报告了服务器的机器时间,而不是用户的机器时间,这当然是有道理的。值得庆幸的是,在进行测试时,我可以假定客户端和服务器在同一台计算机上,因此这不是一个大问题。
我也设法找到了解决我原来问题的方法。我正在寻找的方法是getlocal
,它将DateTime
对象转换为系统时间(如上所述,这就是服务器时间,在测试中可以)。这使得测试可以同时在CircleCI和本地通过。