获取 2 小时之间的差异
Get difference between 2 hours
在我的应用程序中,我需要从 something 获取 hour
& min
并找到它与当前 UTC 时间的时差。
基本上,我试图获得 2 个不同 times/hours(&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
如 中所述 - 如果差异为负,则应增加 24 小时
def time_difference(time_a, time_b)
difference = time_b - time_a
if difference > 0
difference
else
24 * 3600 + difference
end
end
我不确定我是否完全理解了要点,但也许这对你有用:
给定时间,没有转成字符串。
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。
In my application I need to get hour & min from something and find its time difference to current UTC time.
这没有意义。
在计算机中,时间不是“小时&分钟”。时间是自 1970 年 1 月 1 日午夜以来的秒数。计算机的任何其他时间视图都只是 window-在此基础上打扮。我的电脑知道自 1970 年 1 月 1 日午夜以来已经过了 1,551,120,948 秒。因为它也理解公历和时区,所以它可以向我显示为“2019-02-25 13:55:48 -0500”,但它仍然只是存储总秒数。
因此,当您说要将“当前 UTC 时间”(自 1970 年 1 月 1 日以来的总秒数 00:00:00 +0000)与“小时和分钟”进行比较时,我有不知道你想要什么。
如果你考虑你的例子:
For instance:
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
would become -676.0 and not 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 的时差(凌晨 2 点到晚上 10 点)。相差 4 小时的唯一方法是将 b 解释为 前一天 。你怎么知道该怎么做?
您的问题只是不完整,因为在特定的一天需要有一个小时和一个分钟才能进行计算。
在我的应用程序中,我需要从 something 获取 hour
& min
并找到它与当前 UTC 时间的时差。
基本上,我试图获得 2 个不同 times/hours(&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
如
def time_difference(time_a, time_b)
difference = time_b - time_a
if difference > 0
difference
else
24 * 3600 + difference
end
end
我不确定我是否完全理解了要点,但也许这对你有用:
给定时间,没有转成字符串。
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。
In my application I need to get hour & min from something and find its time difference to current UTC time.
这没有意义。
在计算机中,时间不是“小时&分钟”。时间是自 1970 年 1 月 1 日午夜以来的秒数。计算机的任何其他时间视图都只是 window-在此基础上打扮。我的电脑知道自 1970 年 1 月 1 日午夜以来已经过了 1,551,120,948 秒。因为它也理解公历和时区,所以它可以向我显示为“2019-02-25 13:55:48 -0500”,但它仍然只是存储总秒数。
因此,当您说要将“当前 UTC 时间”(自 1970 年 1 月 1 日以来的总秒数 00:00:00 +0000)与“小时和分钟”进行比较时,我有不知道你想要什么。
如果你考虑你的例子:
For instance:
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
would become -676.0 and not 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 的时差(凌晨 2 点到晚上 10 点)。相差 4 小时的唯一方法是将 b 解释为 前一天 。你怎么知道该怎么做?
您的问题只是不完整,因为在特定的一天需要有一个小时和一个分钟才能进行计算。