Получите разницу между 2 часами - PullRequest
0 голосов
/ 25 февраля 2019

В моем приложении мне нужно получить hour & min из что-то и найти разницу во времени с текущим временем UTC.

В основном я пытаюсь получитьразница во времени между двумя разными разами / часами (& мин.) .

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 голосов
/ 25 февраля 2019

Я не уверен, что полностью понял смысл, но, возможно, это может сработать для вас:

С учетом времени, без преобразования в строку.

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)

С Ruby2.6.1 ( Object # затем ):

[ ( 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 .

0 голосов
/ 25 февраля 2019

В моем приложении мне нужно получить час & мин от что-то и найти разницу во времени с текущим временем UTC.

Это не делаетsense .

В компьютере время - это не «час / мин».Время - это количество секунд с полуночи 1 января 1970 года. Любое другое представление о времени на компьютере - это всего лишь показуха.Мой компьютер знает, что с полуночи, 1 января 1970 года, прошло 1551 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 (2:00 до 10:00).Единственный способ получить разницу в 4 часа, если вы интерпретируете b как от предыдущего дня .Как вы знаете, как это сделать?

Ваш вопрос просто неполон, как написано, потому что в конкретный день должны существовать часы и минуты, чтобы иметь какой-то смысл для выполнения расчета.

0 голосов
/ 25 февраля 2019

Как указано в в этом ответе - вам следует добавить 24 часа, если разница отрицательная

def time_difference(time_a, time_b)
  difference = time_b - time_a

  if difference > 0
    difference
  else
    24 * 3600 + difference 
  end
end
...