首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails: Date.today在协调世界时吗?

问Rails: Date.today在协调世界时吗?
EN

Stack Overflow用户
提问于 2012-04-19 07:39:39
回答 6查看 28.8K关注 0票数 45

在Ruby语言中调用Date.today会返回当前日期。但是,它位于哪个时区?我假设是UTC,但我想确认一下。无论哪种方式,documentation都没有声明。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-04-19 08:06:49

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

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

也就是说,至于它是如何计算当天的,让我们看一下the code for Date.today中的摘录

代码语言:javascript
复制
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。

票数 50
EN

Stack Overflow用户

发布于 2013-06-01 14:40:59

你可以使用下面的命令

Time.now.utc.to_date

在ruby中

票数 57
EN

Stack Overflow用户

发布于 2012-04-19 08:07:26

Date的实例表示为天文Julian day数字;它没有一天的小数部分。虽然儒略日是相对于GMT的-因此从技术上讲,Date的实例应该被认为是GMT -但对于大多数目的,您可以忽略这一点,并将其视为没有时区。只有将时区转换为DateTime或时间,您才会关心时区。

ActiveSupport的日期转换工具允许您指定是使用本地时间还是使用UTC。

例如:

代码语言:javascript
复制
>> 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"
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10219670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档