Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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/4/regex/17.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 Rails如何知道我的时区?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on 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-

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-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”