Clock Angle Problem

Objective: Find the Angle between hour hand and minute hand at the given time.

Example:

Time : 12:45
Input : hour = 12, Minute = 45
Output : 112.5

Time : 3:30
Input : hour = 3, Minute = 30
Output : 75

 Approach:

  • At 12:00 both hand meet, take it as reference.
  • Angle between hand and minute = angle of hour hand ~ angle of minute hand.
  • return minimum(angle, 360-angle)
  • hour hand moves 360 in 12 hours => 360/12 = 30 degree in one hour or 0.5 degree in 1 min
  • Minute hand moves 360 in 60 mins => 360/60 = 6 degree in one min
  • So if given time is h hours and m mins, hour hand will move (h*60+m)*0.5 and minute hand will move 6*m

Code:

public class AngleHourMinute {
public static double angle(int hour, int minute) {
if (hour < 0 || minute < 0) {
return 1;
}
if (hour == 12) {
hour = 0;
}
if (minute == 60) {
minute = 0;
hour += 1;
}
double hourAngle = (hour * 60 + minute) * 0.5;
double minAngle = minute * 6;
double bwAngle = Math.abs(hourAngle minAngle);
return Math.min(360 bwAngle, bwAngle);
}
public static void main(String[] args) {
System.out.println(angle(12, 45));
System.out.println(angle(3, 30));
System.out.println(angle(2, 23));
}
}

view raw
AngleHourMinute.java
hosted with ❤ by GitHub


Output:

112.5
75.0
66.5