Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.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 将Time.now转换为第一天的准确小时数_Ruby - Fatal编程技术网

Ruby 将Time.now转换为第一天的准确小时数

Ruby 将Time.now转换为第一天的准确小时数,ruby,Ruby,我有一个时间。现在对象。我想在UNIX的第一天创建一个新的一天,其时、分、秒数与所提供的时间相同。现在对象有了 有没有一种方法可以自动做到这一点?或者您必须手动复制分钟/秒。一种方法是: t = Time.now #=> 2016-10-27 13:22:04 +0000 u = Time.at(0) #=> 1970-01-01 00:00:00 +0000 hend_time = Time.new(u.year, u.month, u.day, t.hour, t.min, t.

我有一个
时间。现在
对象。我想在UNIX的第一天创建一个新的一天,其时、分、秒数与所提供的
时间相同。现在
对象有了


有没有一种方法可以自动做到这一点?或者您必须手动复制分钟/秒。

一种方法是:

t = Time.now
#=> 2016-10-27 13:22:04 +0000
u = Time.at(0)
#=> 1970-01-01 00:00:00 +0000
hend_time = Time.new(u.year, u.month, u.day, t.hour, t.min, t.sec)
#=> 1970-01-01 13:22:04 +0000

它计算从现在到最后一个午夜之间的时间,并将其添加到Unix epoch中

require 'date'
now = Time.now
Time.at(now-now.to_date.to_time)

感谢Stefan和steenslag的富有洞察力的评论。

这将起作用,尽管它有点骇人听闻:

Time.at(Time.now.to_i % 86400)
#=> 1970-01-01 14:35:37 +0100
请注意,返回本地时区中的实例

有没有一种方法可以自动做到这一点


您是否询问Ruby
Time
类是否有返回历元时间(1970-01-01)的方法?浏览
Time
文档时,我没有发现返回Epoch Time()的实例。您可以轻松创建一个
Time
实例,该实例具有纪元时间,但
Time.new('1970','01','01)
Time.at(0)
返回Unix纪元,但OP希望保留提供的
Time.now
对象的时分秒。
Time.at(Time.now Date.today.to_Time)
是相同的,但是更短。您应该始终引用同一个实例,即
t=Time.now;Time.at(t-t.to_date.to_Time)
。假设您有积极的支持,您可以使用
Time#seconds\u从午夜开始进一步简化它。
@EricDuminil我想说答案在不同的时区给出相同的结果。@EricDuminil确切地说,想象一个cron作业在午夜左右运行。您想要结果在哪个时区?UTC还是本地时区?