在Ruby中调用Date.today
返回当前日期.但是,它在哪个时区?我假设UTC,但我想确定一下.这documentation个国家都没有说明这两种情况.
在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.now
或Date.today
的工作方式).另见ActiveSupport extensions to Time
.