在Ruby语言中调用Date.today会返回当前日期。但是,它位于哪个时区?我假设是UTC,但我想确认一下。无论哪种方式,documentation都没有声明。
发布于 2012-04-19 08:06:49
TL;DR: Date.today使用系统的本地时区。如果您要求使用UTC格式,请改为从UTC时间获取日期,例如Time.now.utc.to_date。
日期没有时区,因为它们不代表时间。
也就是说,至于它是如何计算当天的,让我们看一下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");然后继续使用use tm创建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。
发布于 2013-06-01 14:40:59
你可以使用下面的命令
Time.now.utc.to_date
在ruby中
发布于 2012-04-19 08:07:26
Date的实例表示为天文Julian day数字;它没有一天的小数部分。虽然儒略日是相对于GMT的-因此从技术上讲,Date的实例应该被认为是GMT -但对于大多数目的,您可以忽略这一点,并将其视为没有时区。只有将时区转换为DateTime或时间,您才会关心时区。
ActiveSupport的日期转换工具允许您指定是使用本地时间还是使用UTC。
例如:
>> t = Date.today.to_time
=> Wed Apr 18 00:00:00 -0400 2012
>> t.zone
=> "EDT"
>> t = Date.today.to_time(:utc)
=> Wed Apr 18 00:00:00 UTC 2012
>> t.zone
=> "UTC"https://stackoverflow.com/questions/10219670
复制相似问题