Алгоритм, необходимый для расчета разницы между двумя временами

Вопрос:У меня есть выделение часа 0-23 и выпадающий список минут 0-59 для Start time и End time соответственно (так что четыре элемента управления). Я ищу алгоритм для вычисления разницы во времени с использованием этих четырех значений. Так как они не хранятся в элементарных элементах выбора даты/времени, я не думаю, что могу использовать любые стандартные функции

Вопрос:

У меня есть выделение часа 0-23 и выпадающий список минут 0-59 для Start time и End time соответственно (так что четыре элемента управления).

Я ищу алгоритм для вычисления разницы во времени с использованием этих четырех значений.

Так как они не хранятся в элементарных элементах выбора даты/времени, я не думаю, что могу использовать любые стандартные функции обработки даты/времени.

Как рассчитать разницу между двумя раз?

Лучший ответ:

Этот псевдокод дает вам алгоритм для определения разницы в минутах.

Он предполагает, что, если время начала после окончания времени, время начала было фактически в предыдущий день.

startx = starthour * 60 + startminute endx = endhour * 60 + endminute duration = endx — startx if duration < 0: duration = duration + 1440

Значения startx и endx – это количество минут с полуночи.

Это в основном делает:

  • Получить количество минут от начала дня для начала.
  • Получить количество минут от начала дня до конца.
  • Вычтите первое из последнего.
  • Если результат отрицательный, добавьте количество минут в день.

Не уверен, что вы не можете использовать функции манипуляции с датой и временем. Вы можете обнаружить, что вы можете легко построить дату/время и рассчитать различия с чем-то вроде:

DateTime startx = new DateTime (1, 1, 2010, starthour, startminute, 0); DateTime endx = new DateTime (1, 1, 2010, endhour , endminute , 0); Integer duration = DateTime.DiffSecs(endx, startx) / 60; if (duration < 0) duration = duration + 1440;

хотя он, вероятно, не нужен для вашего простого сценария. Я бы придерживался псевдокода, который я дал выше, если вы не обнаружите, что делаете некоторые хитрое манипулирование датой/временем.

Если вы хотите увеличить продолжительность (в минутах) на часы и минуты:

durHours = int(duration / 60) durMinutes = duration % 60 // could also use duration — (durHours * 60) Ответ №1

Это рассчитает продолжительность в минутах, включая год как фактор

//* Assumptions: Date is in Julian Format startx = starthour * 60 + startminute endx = endhour * 60 + endminute duration = endx — startx if duration <= 0: duration = duration + 1440 end-if if currday > prevday duration = duration + ((currday-preday) — 1 * 1440) end-if Ответ №2

Сначала вам нужно проверить, не превышает ли время окончания время начала, чтобы предотвратить возникновение каких-либо проблем. Для этого сначала проверьте, больше ли значение End_Time_Hour, чем Start_Time_Hour. Если они равны, вы должны проверить, будет ли End_Time_Min больше или равно Start_Time_Min.
Затем вы вычитаете Start_Time_Hour из End_Time_Hour. Затем вы вычитаете Start_Time_Min из End_Time_Min. Если разница минут меньше 0, вы уменьшаете часовую разницу на единицу и добавляете разницу минут до 60 (или 59, проверьте это). Соедините эти два вместе, и вы должны быть настроены.

Ответ №3$start_time_hr = 5; $start_time_mi = 50; $end_time_hr = 8; $end_time_mi = 30; $diff = (($end_time_hr*60)+$end_time_mi) — (($start_time_hr*60)+$start_time_mi); $diff_hr = (int)($diff / 60); $diff_mi = (int)($diff) — ($diff_hr*60); echo $diff_hr . ‘:’ . $diff_mi; Ответ №4

простое уравнение должно помочь:

mindiff = 60 + endtime.min — starttime.min hrdiff = ((mindiff/60) — 1) + endtime.hr — starttime.hr Ответ №5

Это дает вам продолжительность в часах и минутах

h1 = «hora1» m1 «min1» h2 «hora2» m2 = «min2» if ( m1 > m2) { h3 = (h2 — h1) — 1; } else { h3 = h2 — h1; } m1 = 60 — m1; if (m1 + m2 >= 60) { m3 = 60 — (m1 + m2); } else if (m3 < 0) { m3 = m3 * -1; } else { m3 = m1 + m2; } System.out.println(«duration:» + h3 + «h» + m3 + «min»); Ответ №6

Если у вас есть функция, которая возвращает количество дней с даты начала (например, dayssince1900), вы можете просто конвертировать обе даты в секунды с этой даты начала, сделать ABS (d1-d2), а затем преобразовать секунды назад формат, который вы хотите, например HHHH: ММ: СС

Простой, например,

SecondsSince1900(d) { return dayssince1900(d)*86400 +hours(d)*3600 +minutes(d)*60 +seconds(d); } diff = ABS(SecondsSince1900(d1)-SecondsSince1900(d2)) return format(diff DIV 3600)+’:’+format((diff DIV 60) MOD 60)+’:’+format(diff MOD 60);

Hum: Не так просто, если вам нужно учитывать секунды прыжка, которые астрономы очень хотят время от времени вставлять.

Оцените статью
Добавить комментарий