2小时之间的差异

时间:2019-02-25 15:57:42

标签: ruby difference

在我的应用程序中,我需要从某物中获取hourmin,并找到其与当前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

3 个答案:

答案 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解释为前一天的 。你怎么知道那样做?

您的问题按照书面要求是不完整的,因为在特定的一天需要一个小时和一分钟才能使计算有意义。