One approach to solving the problem is to map the times 00:00 to 23:59 to a circle and then compute the chord length between the two mappings. For a discussion on how to compute chord length, please refer to the Wikipedia article "Circular Segment."
Below is a picture of a circle with the cord length denoted by c
The general equation to compute the length of the chord is given by the equation below
For simplicity will pick R to be 1. The above equation now simplifies to the following
The above concepts and math was implemented in the following code using Python 3.6.
import math def create_hours_minutes_in_a_day(): number_of_hours_in_day = 24 number_of_minutes_in_an_hour = 60 number_of_minutes_in_a_day = 0 hours_minutes_in_day = [] for hour in range(0, number_of_hours_in_day): if hour < 10: hour_to_print = '0' + str(hour) else: hour_to_print = str(hour) for minute in range(0, number_of_minutes_in_an_hour): if minute < 10: minute_to_print = '0' + str(minute) else: minute_to_print = str(minute) hours_minutes_in_day.append(hour_to_print+':'+minute_to_print) number_of_minutes_in_a_day += 1 return hours_minutes_in_day, number_of_minutes_in_a_day def map_hour_minute_in_day_to_circle(hour_colon_minute_in_day, number_of_minutes): number_of_degrees_in_a_circle = 360 increment_size_in_degrees = number_of_degrees_in_a_circle / number_of_minutes current_angle_in_degrees = 0 map_hour_minute_to_circle = dict() for x in hour_colon_minute_in_day: map_hour_minute_to_circle[x] = current_angle_in_degrees current_angle_in_degrees += increment_size_in_degrees return map_hour_minute_to_circle def compute_arc_length_between_time_interval(mapping_of_hour_minute_to_angle, time_a, time_b): # Since we want the relative distance betwee two time intervals, # can set the circle to a radius = 1 angle_a = mapping_of_hour_minute_to_angle[time_a] angle_b = mapping_of_hour_minute_to_angle[time_b] chord_length = 2 * math.sin ( math.radians(angle_b - angle_a) / 2 ) print("Time A: ", time_a, "Angle A: ", angle_a) print("Time b: ", time_b, "Angle A: ", angle_b) print("Chord: ", chord_length) print("---") hour_colon_minute_in_day, number_of_minutes = create_hours_minutes_in_a_day() map_hour_minute_to_angle = map_hour_minute_in_day_to_circle(hour_colon_minute_in_day, number_of_minutes) compute_arc_length_between_time_interval(map_hour_minute_to_angle, '00:00', '06:00') compute_arc_length_between_time_interval(map_hour_minute_to_angle, '00:00', '12:00') compute_arc_length_between_time_interval(map_hour_minute_to_angle, '00:00', '18:00') compute_arc_length_between_time_interval(map_hour_minute_to_angle, '00:00', '23:59')
The output from the above code is below
Time A: 00:00 Angle A: 0 Time b: 06:00 Angle A: 90.0 Chord: 1.4142135623730951 --- Time A: 00:00 Angle A: 0 Time b: 12:00 Angle A: 180.0 Chord: 2.0 --- Time A: 00:00 Angle A: 0 Time b: 18:00 Angle A: 270.0 Chord: 1.4142135623730951 --- Time A: 00:00 Angle A: 0 Time b: 23:59 Angle A: 359.75 Chord: 0.0043633196686735124 ---