在我的应用程序中,我需要从某物中获取hour
和min
,并找到其与当前UTC时间的时差。
基本上,我正在尝试获取2个不同的时间/小时(&min) 之间的时差。
my_time = '2019-02-24 16:52' # This I get from my application
a = DateTime.parse(my_time).strftime('%H:%M')
=> '16:52'
b = Time.utc(Time.now.year, Time.now.month, Time.now.day, Time.now.hour, Time.now.min).strftime('%H:%M')
=> '15:52'
最优方法可以做到,但是由于它们是 string
:
time_difference = a - b # out would be +1
我也尝试过在重复问题中给出答案,但考虑的日期很长。
例如:
a = Time.parse('2015-12-31 02:00:00 +0100')
b = Time.parse('2015-11-31 22:00:00 +0100')
c = time_difference(a, b) / 3600
将成为-676.0
,而不是4
答案 0 :(得分:0)
如this answer中所述-如果差异为负,则应增加24小时
def time_difference(time_a, time_b)
difference = time_b - time_a
if difference > 0
difference
else
24 * 3600 + difference
end
end
答案 1 :(得分:0)
我不确定我是否完全明白这一点,但是也许这对你有用:
给出时间,而不转换为字符串。
my_time = '2019-02-24 16:52'
a = Time.parse(my_time)
b = Time.utc(Time.now.year, Time.now.month, Time.now.day, Time.now.hour, Time.now.min)
使用Ruby 2.6.1(Object#then):
[ ( Time.parse(a.to_s.split[1]) - Time.parse(b.to_s.split[1]) ) / 3600 ].then { |delta| delta[0] < 0 ? 24 + delta[0] : delta[0] }
对于Ruby 2.5,请使用Object#yield_self。
答案 2 :(得分:0)
在我的应用程序中,我需要从某物中获取小时和分钟,并找到其与当前UTC时间的时差。
这没有道理。
在计算机中,时间不是“小时和分钟”。时间是自1970年1月1日午夜以来的秒数。对计算机的其他任何时间查看都只是在此之上进行橱窗装饰。我的电脑知道,自1970年1月1日午夜以来,已经是1,551,120,948秒。由于它也了解公历和时区,因此可以向我显示为“ 2019-02-25 13:55:48 -0500”,但它仍然只存储总秒数。
因此,当您说要将“当前UTC时间”(自1970-01-01 00:00:00 +0000开始的总秒数)与“小时和分钟”进行比较时,我不知道你想要什么。
如果考虑您的示例:
例如:
a = Time.parse('2015-12-31 02:00:00 +0100') b = Time.parse('2015-11-31 22:00:00 +0100') c = time_difference(a, b) / 3600
将变为-676.0,而不是4
为什么会相差4个小时?我想避免这些日期不同的最简单方法是在同一日期构造一个新时间:
b_norm = Time.new(a.year, a.month, a.day, b.hour, b.min, b.sec)
c = time_difference(a, b_norm) / 3600
但这会产生20的时差(从2AM到10PM)。唯一的区别是4小时是,如果您将b解释为前一天的 。你怎么知道那样做?
您的问题按照书面要求是不完整的,因为在特定的一天需要一个小时和一分钟才能使计算有意义。