Rails如何知道我的时区?我没有将其设置为application.rb
:
# config.time_zone = 'Central Time (US & Canada)'
我在整个应用中搜索了time_zone
,这是它的唯一实例。我也没有看到任何时区设置的环境变量。我在Windows上。
C:\Users\Chloe\workspace\MyBestBody>rails runner "p Time.now"
DL is deprecated, please use Fiddle
2015-06-12 23:38:33 -0400
在部署到Heroku时打印UTC时间。
C:\Users\Chloe\workspace\MyBestBody>heroku run rails console
Running `rails console` attached to terminal... up, run.1949
Loading production environment (Rails 4.2.1)
irb(main):001:0> Time.new
=> 2015-06-13 03:28:34 +0000
答案 0 :(得分:2)
从gettimeofday()开始,ruby MRI source会让我相信:
int __cdecl
gettimeofday(struct timeval *tv, struct timezone *tz)
{
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
filetime_to_timeval(&ft, tv);
return 0;
}
根据评论,这是一个C函数,由引擎盖下的ruby日期例程调用。你不是自己调用这个方法,而是调用你正在调用的ruby方法。
答案 1 :(得分:2)
你的问题涉及两件事。
第一个是红宝石认为的时区。这是您使用Time.now
或Time.mktime
等内容时使用的区域。 Ruby使用操作系统提供的C级API来获取此信息(TZ环境变量可以在unixy操作系统上覆盖它)。
第二个是用户在使用您的应用时会看到的时区。这通常不是一回事。即使您的用户都在同一时区,最好让您的服务器使用UTC,因为它不受夏令时之类的影响。
出于这个原因,rails有自己的时区系统,你找到的设置控制着该时区的默认值。有时您可能会在每个用户的基础上覆盖它。 Rails始终以UTC格式记录信息,但它将使用Time.zone
的值显示在视图中(并且表单中的输入将在该区域中进行解释)。您可以通过
Time.zone.now