Ruby on rails Rails如何知道我的时区?
Rails如何知道我的时区?我没有在Ruby on rails Rails如何知道我的时区?,ruby-on-rails,ruby,Ruby On Rails,Ruby,Rails如何知道我的时区?我没有在application.rb中设置它: # config.time_zone = 'Central Time (US & Canada)' 我在整个应用程序中搜索了时区,这是它的唯一实例。我也没有看到任何时区设置的环境变量。我在窗户上 C:\Users\Chloe\workspace\MyBestBody>rails runner "p Time.now" DL is deprecated, please use Fiddle 2015-06-
application.rb中设置它:
# config.time_zone = 'Central Time (US & Canada)'
我在整个应用程序中搜索了时区,这是它的唯一实例。我也没有看到任何时区设置的环境变量。我在窗户上
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
来自gettimeofday()的Rails 4.2.1,或者让我相信:
int __cdecl
gettimeofday(struct timeval *tv, struct timezone *tz)
{
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
filetime_to_timeval(&ft, tv);
return 0;
}
根据注释,这是一个C函数,由ruby date例程在后台调用。您自己并不调用该方法,而是调用您正在调用的ruby方法。来自gettimeofday(),或者让我相信:
int __cdecl
gettimeofday(struct timeval *tv, struct timezone *tz)
{
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
filetime_to_timeval(&ft, tv);
return 0;
}
根据注释,这是一个C函数,由ruby date例程在后台调用。您自己不调用该方法,而是调用正在调用的ruby方法。您的问题涉及两个不同的方面
第一个是ruby所认为的时区。这是当您使用Time.now
或Time.mktime
时使用的区域。Ruby使用操作系统提供的C级API来获取此信息(TZ环境变量可以在unixy操作系统上覆盖此信息)
第二个是你的用户在使用你的应用程序时会看到的时区。这往往不是一回事。即使您的用户都在同一时区,让您的服务器使用UTC也是一个好主意,因为它不受夏令时之类的限制
因此,rails有自己的时区系统,您找到的设置控制该时区的默认值。有时,您可能会在每个用户的基础上覆盖此内容。Rails总是以UTC记录信息,但它将使用Time.zone
的值显示在视图中(来自表单的输入将在该区域中进行解释)。您可以通过执行以下操作查看此区域中的当前时间
Time.zone.now
你的问题涉及两件不同的事情
第一个是ruby所认为的时区。这是当您使用Time.now
或Time.mktime
时使用的区域。Ruby使用操作系统提供的C级API来获取此信息(TZ环境变量可以在unixy操作系统上覆盖此信息)
第二个是你的用户在使用你的应用程序时会看到的时区。这往往不是一回事。即使您的用户都在同一时区,让您的服务器使用UTC也是一个好主意,因为它不受夏令时之类的限制
因此,rails有自己的时区系统,您找到的设置控制该时区的默认值。有时,您可能会在每个用户的基础上覆盖此内容。Rails总是以UTC记录信息,但它将使用Time.zone
的值显示在视图中(来自表单的输入将在该区域中进行解释)。您可以通过执行以下操作查看此区域中的当前时间
Time.zone.now
你能再解释一下吗?我不是在打电话给#gettimeofday
。这个函数似乎还使用了一个文件句柄,我也没有使用它。我怎样才能改变它?我设置了config.time\u zone='UTC'
,但它仍然显示-04:00
!确保在进行配置更改后重新启动服务器或控制台。上面的翻译是:“Ruby使用操作系统提供的C级API获取当前时间。”当前时间包括时区。操作系统知道时区是什么。Rails/Ruby中有一个bug,它不能在Windows上剥离/转换时区信息。将发布另一个关于如何在Windows上更改Rails时区的问题。你能解释更多吗?我不是在打电话给#gettimeofday
。这个函数似乎还使用了一个文件句柄,我也没有使用它。我怎样才能改变它?我设置了config.time\u zone='UTC'
,但它仍然显示-04:00
!确保在进行配置更改后重新启动服务器或控制台。上面的翻译是:“Ruby使用操作系统提供的C级API获取当前时间。”当前时间包括时区。操作系统知道时区是什么。Rails/Ruby中有一个bug,它不能在Windows上剥离/转换时区信息。将发布另一个关于如何在Windows上更改Rails中时区的问题。Rails runner“p time.zone.name”
:“UTC”
Rails runner“p time.zone.name”
:“UTC”