Проблема со следующей строкой:
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss aa");
Это должно быть:
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss aa");
Ваш расчет diffMinutes
также неверен.
Do это выглядит следующим образом:
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws InterruptedException {
Scanner input = new Scanner(System.in);
System.out.print("Enter start time (hh:mm:ss aa): ");
String starttime = input.nextLine();
System.out.print("Enter end time (hh:mm:ss aa): ");
String endtime = input.nextLine();
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss aa");
Date d1 = null;
Date d2 = null;
try {
d1 = format.parse(starttime);
d2 = format.parse(endtime);
// in milliseconds
long diff = Math.abs(d2.getTime() - d1.getTime());
long diffSeconds = (diff / 1000) % 60;
long diffMinutes = (diff / (60 * 1000));
System.out.print(diffMinutes + " minutes and " + diffSeconds + " seconds.");
} catch (Exception e) {
System.out.println("Invalid fromat");
}
}
}
Пример прогона:
Enter start time (hh:mm:ss aa): 10:20:30 am
Enter end time (hh:mm:ss aa): 10:20:13 pm
719 minutes and 43 seconds.
Примечания:
- As @ greg-449 упомянул, вы должны стремиться использовать современный API даты и времени .
- Разница между двумя величинами является абсолютной величиной, которая всегда положительна, т.е. разница между 2 и 5 = разница между 5 и 2 = 3.
Math.abs
дает вам абсолютное значение числа, которое лучше всего подходит для нахождения разницы между двумя величинами. - Необходимо понимать, что, не сообщая о дате, разница между двумя временами всегда учитывается одна и та же дата, т.е. разница между 12:02:15 и 23:58:10 = разница между 11:58:10 и 12:02:15 = 1435 минут и 55 секунд. Разница между 11:58:10 вечера в одну дату и 12:02:15 в следующую дату составляет 4 минуты 5 секунд. Тем не менее, вы вводите только для времени и не имеет элемента даты, и поэтому разница была учтена для той же даты. Ниже приведена программа для рассмотрения даты со временем.
Программа, учитывающая дату со временем:
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws InterruptedException {
Scanner input = new Scanner(System.in);
System.out.print("Enter start time (dd.MM.yyyy at hh:mm:ss aa): ");
String starttime = input.nextLine();
System.out.print("Enter end time (dd.MM.yyyy at hh:mm:ss aa): ");
String endtime = input.nextLine();
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy 'at' hh:mm:ss aa");
Date d1 = null;
Date d2 = null;
try {
d1 = format.parse(starttime);
d2 = format.parse(endtime);
// in milliseconds
long diff = Math.abs(d2.getTime() - d1.getTime());
long diffSeconds = (diff / 1000) % 60;
long diffMinutes = (diff / (60 * 1000));
System.out.print(diffMinutes + " minutes and " + diffSeconds + " seconds.");
} catch (Exception e) {
System.out.println("Invalid fromat");
}
}
}
Пример прогона:
Enter start time (dd.MM.yyyy at hh:mm:ss aa): 03.03.2020 at 11:58:10 pm
Enter end time (dd.MM.yyyy at hh:mm:ss aa): 04.03.2020 at 12:02:15 am
4 minutes and 5 seconds.