Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 Date.today是UTC吗?_Ruby_Date_Timezone - Fatal编程技术网

Ruby Date.today是UTC吗?

Ruby Date.today是UTC吗?,ruby,date,timezone,Ruby,Date,Timezone,在Ruby中调用Date.today返回当前日期。但是,它在哪个时区?我假设UTC,但我想确定一下。这两种情况都不存在。TL;DR:日期。今天使用系统的本地时区。如果您需要UTC格式,则从UTC时间获取日期,例如time.now.UTC.to_date 日期没有时区,因为它们不代表时间 也就是说,关于它是如何计算当前日期的,让我们看看以下摘录: 然后继续使用tm创建Date对象。由于tm包含使用日期的系统本地时间。因此,今天使用的是系统本地时间,而不是UTC 您始终可以在任何时间上使用将其就

在Ruby中调用
Date.today
返回当前日期。但是,它在哪个时区?我假设UTC,但我想确定一下。这两种情况都不存在。

TL;DR:
日期。今天
使用系统的本地时区。如果您需要UTC格式,则从UTC时间获取日期,例如
time.now.UTC.to_date


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

也就是说,关于它是如何计算当前日期的,让我们看看以下摘录:

然后继续使用
tm
创建
Date
对象。由于
tm
包含使用日期的系统本地时间。因此,今天使用的是系统本地时间,而不是UTC


您始终可以在任何
时间
上使用将其就地转换为UTC,或以UTC返回新的等效
时间
对象。然后,您可以调用它来获取
日期
。所以:
some\u time.getutc.to\u date


如果您使用的是(Rails附带的),请注意它与Ruby的时间构造函数完全分离,并且不会影响它们(即它不会改变
time.now
Date.today
的工作方式)。另请参见。

日期实例表示为天文儒略日数;它没有一天的零碎部分。虽然儒略日是相对于格林尼治标准时间的,所以从技术上讲,日期的实例应该被认为是格林尼治标准时间,但在大多数情况下,你可以忽略这一点,将其视为没有时区。只有将时区转换为DateTime或time时,您才会关心它

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

例如:


你可以通过使用

Time.now.utc.to\u date


在ruby中

如果您的rails应用程序配置为在UTC时区运行,那么只需使用
time.zone.today
,否则使用
time.now.UTC强制运行。到目前为止
您可以使用

Date.current

获取配置时区的当前日期。

感谢您的澄清。我想问我的问题更好的方式应该是“Date.today第二天返回哪个时区?”我想如果我想要“今天的UTC日期”,我需要做一些类似于
time.now.zone.to_Date
(在Rails中)。
time.zone.now.to_Date
将使用应用程序配置为的任何时区。值得研究
时间。如果要为特定代码块设置时区,请使用_zone(“[zone name]”)
,在本例中为UTC。是的,使用ActiveSupport的时区管理,你可以做
Time.zone.now.to_date
,它等于
Time.current.to_date
,它等于
date.current
。请看我对@AndrewMarshall的回答中关于我为什么问原始问题的评论。基本上,我是想弄清楚本地系统上的Date.today是否与UTC系统上的Date.today相同。正如Andrew所说,Date.today是根据本地时间而不是UTC生成的日期。要获得与UTC时间对应的日期,请尝试time.now.UTC.To_date。我要指出的是,虽然对于某些国家,忽略日期的时区可能有效,但在新西兰,如果这样做的话,您在工作日的大部分时间都会得到错误的日期。(例如,2月13日当地时间上午10点,我认为是12日协调世界时2100点)。比公认的答案要好得多。我想知道这是否是从2012年4月开始添加的。这是有用的信息,但它不能回答问题。这回答了相关问题“如何获取当前UTC时间的日期?”,海报询问date.today是否为UTC,而不是如何获取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"
Date.current