Получите разницу между 2 часами
В моем заявлении мне нужно получить 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
3 ответа
Я не уверен, что полностью понял смысл, но, возможно, это может сработать для вас:
Учитывая время, без преобразования в строку.
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 # затем):
[ ( 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.
Как уже упоминалось в этом ответе - вы должны добавить 24 часа, если разница отрицательна
def time_difference(time_a, time_b)
difference = time_b - time_a
if difference > 0
difference
else
24 * 3600 + difference
end
end
В моем приложении мне нужно получить час-мин от чего-то и найти разницу во времени с текущим временем UTC.
Это не имеет смысла.
В компьютере время не "час и мин". Время - это количество секунд с полуночи 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 утра до 10 вечера). Единственный способ получить разницу в 4 часа - это интерпретировать b как результат предыдущего дня. Как вы знаете, чтобы сделать это?
Ваш вопрос просто неполный, как написано, потому что в определенный день должны существовать часы и минуты, чтобы иметь какой-либо смысл для выполнения расчета.