2016-09-14 1 views
0

Я создаю программу для поиска разницы во времени между двумя входами. Начало и время окончания ввода вводятся в 12-часовом формате, таком как 9:30 и 11:15.Разница во времени с использованием parseInt() и подстроки

Я прочитал строку, используя функцию подстроки, чтобы извлечь строку (до ':'), а затем преобразован в целое. Экстракция работает отлично.

Проблема, которая у меня есть с расчетами. например - разница в времени между 13:03 и 12:56 составляет 1433 минуты. Но моя программа отображает разницу в 713 минут.

У меня есть часть вычисления кода вверх. Мы ценим любые предложения.

// If-else statements to calculate the total time difference 
if((lower1.indexOf('a') == -1) && (lower2.indexOf('a') == -1) && (intMin1 <= 60) && (intMin2 <= 60)){ 
    timeDifference = Math.abs((((intHrs1+12)*60)+intMin1) - (((intHrs2+12)*60)+intMin2)); 
    System.out.println("The time difference is " + timeDifference + " minutes"); 
} else if((lower1.indexOf('a') != -1) && (lower2.indexOf('a') == -1) && (intMin1 <= 60) && (intMin2 <= 60)) { 
    timeDifference = Math.abs((((intHrs2+12)*60)+intMin2) - ((intHrs1*60)+intMin1));   
    System.out.println("The time difference is " + timeDifference + " minutes"); 
} else if((lower1.indexOf('a') != -1) && (lower2.indexOf('a') != -1) && (intMin1 <= 60) && (intMin2 <= 60)){ 
    timeDifference = Math.abs(((intHrs2*60)+intMin1) - ((intHrs1*60)+intMin2)); 
    System.out.println("The time difference is " + timeDifference + " minutes"); 
} else if((lower1.indexOf('a') == -1) && (lower2.indexOf('a') != -1) && (intMin1 <= 60) && (intMin2 <= 60)){ 
    timeDifference = Math.abs((((24-(intHrs1+12))*60)+intMin1) - ((intHrs2*60)+intMin2)); 
    System.out.println("The time difference is " + timeDifference + " minutes"); 
} else if(intMin1 >= 60){ 
    System.out.println("Error: The First time is invalid"); 
} else { 
    System.out.println("Error: The second time is invalid"); 
} 
+6

http://stackoverflow.com/questions/4927856/how-to-calculate-time-difference-in-java – OldProgrammer

+2

В вашей логике, вы добавляете 12 часов, если это 'pm' вместо' am', и вы получили хороший пример того, что эта логика ошибочна, а это когда '12:56 вечера', вы думаете, вы должны добавить 12 часов на это? –

+1

Иногда, когда вы пытаетесь изобрести колесо, вы получаете квадрат. –

ответ

0

НЕ использовать ParseInt и подстроку для этого:

String input1 = "1:03pm".toUpperCase(); 
String input2 = "12:56pm".toUpperCase(); 

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("h:mma"); 
LocalTime time1 = LocalTime.parse(input1, formatter); 
LocalTime time2 = LocalTime.parse(input2, formatter); 

long durationInMinutes = Duration.between(time1, time2).toMinutes() 
if(durationInMinutes < 0) durationInMinutes += 1440; //1440 minutes per day 
+0

Так близко, но ..... Результат равен '-7', а не' 1433' – Andreas

+2

Мне нужно использовать parseint и substring. – mandok

+0

@Andreas Предполагая, что два раза в одну и ту же дату, разница (-) 7 – larsgrefer

0

Чтобы сделать код читаемым и проверяемым, создавать вспомогательные методы.

public static void main(String[] args) { 
    System.out.println(minutesBetween("9:30am", "11:15am")); 
    System.out.println(minutesBetween("1:03pm", "12:56pm")); 
} 
private static int minutesBetween(String time1, String time2) { 
    int minutes = toMinuteOfDay(time2) - toMinuteOfDay(time1); 
    if (minutes < 0) 
     minutes += 1440; 
    return minutes; 
} 
private static int toMinuteOfDay(String time) { 
    int colon = time.indexOf(':'); 
    int hour = Integer.parseInt(time.substring(0, colon)); 
    int minute = Integer.parseInt(time.substring(colon + 1, colon + 3)); 
    if (hour == 12) 
     hour = 0; 
    if (time.indexOf('a') == -1) 
     hour += 12; 
    return hour * 60 + minute; 
} 

Выход

105 
1433 
Смежные вопросы