在Ruby中调用Date.today返回当前日期.但是,它在哪个时区?我假设UTC,但我想确定一下.这documentation个国家都没有说明这两种情况.

推荐答案

TL;DR: Date.today使用系统的本地时区.如果您要求使用UTC,则从UTC时间获取日期,例如Time.now.utc.to_date.


日期没有时区,因为它们不代表时间.

也就是说,对于how,它计算的是当天,让我们看一下the code for Date.today的摘录:

time_t t;
struct tm tm;
// ...
if (time(&t) == -1)
  rb_sys_fail("time");
if (!localtime_r(&t, &tm))
  rb_sys_fail("localtime");

然后继续使用usetm创建Date对象.由于tm使用localtime()表示系统的本地时间,因此Date.today使用系统的本地时间,而不是UTC.


您可以在任何Time上始终使用Time#utc将其就地转换为UTC,或使用Time#getutc以UTC返回新的等效Time对象.然后你可以打Time#to_date,得到Date.所以:some_time.getutc.to_date.

如果您使用的是ActiveSupport’s time zone support(包含在Rails中),请注意,它与Ruby的时间构造函数完全不同,并且不会影响它们(也就是说,它不会改变Time.nowDate.today的工作方式).另见ActiveSupport extensions to Time.

Ruby相关问答推荐

Rbenv说未安装已安装的版本

使用 Ruby,我如何访问和比较这些嵌套的数组值?

你如何称呼 Ruby 中的 &: 运算符?

从 URL 字符串中提取主机的 Ruby 代码

将块传递给方法传递给Ruby中的另一个方法

这些 Ruby 命名空间约定之间有什么区别?

如何以不同 colored颜色 输出我的 ruby​​ 命令行文本

如何使用 RVM 重新编译 ruby​​?

按可能为 nil 的属性对对象的 ruby​​ 数组进行排序

是否有等效于 `Array::sample` 的哈希值?

在 ruby​​ 的超类中调用另一个方法

确定一个值是否存在于哈希数组中

Ruby 1.9 哈希,键中有破折号

是否有更简单的(单行)语法来别名一个类方法?

如何转换 Ruby 哈希,使其所有键都是符号?

if语句末尾带有then有什么区别?

在类方法中使用实例变量 - Ruby

Ruby - 无法修改冻结的字符串 (TypeError)

Ruby:如何计算一个字符串在另一个字符串中出现的次数?

Ruby 的 %q / %Q 引用方法的用例是什么?