Начиная с 2018 года, вы действительно должны использовать API даты / времени, представленные в Java 8 (или ThreeTen Backport , если вы Java 7 или ниже)
String date1 = "26/02/2011";
String time1 = "11:00 AM";
String date2 = "27/02/2011";
String time2 = "12:15 AM";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm a");
LocalDateTime start = LocalDateTime.parse(date1 + " " + time1, formatter);
LocalDateTime end = LocalDateTime.parse(date2 + " " + time2, formatter);
Duration duration = Duration.between(start, end);
long hours = duration.toHours();
long mins = duration.minusHours(hours).toMinutes();
// Or if you're using Java 9+
//long mins = duration.toMinutesPart();
System.out.println("Hours = " + hours);
System.out.println("Mins = " + mins);
который выводит
Hours = 13
Mins = 15
Я бы порекомендовал прочитать Классы даты и времени
«что не так с этим кодом, пожалуйста?»
Следующее ...
try {
Date dateObj1 = sdf.parse(date1 + " " + time1);
} catch (ParseException ex) {
Logger.getLogger(DateForm.class.getName()).log(Level.SEVERE, null, ex);
}
try {
Date dateObj2 = sdf.parse(date2 + " " + time2); // TODO add your handling code here:
} catch (ParseException ex) {
Logger.getLogger(DateForm.class.getName()).log(Level.SEVERE, null, ex);
}
Просто создает два объекта, область действия которых относится только к блокам try-catch
, в которых они определены, dateObj1
и dateObj2
могутне доступны вне этих блоков ... но ...
Вы определяете ...
private Object dateObj1;
private Object dateObj2;
как поля экземпляра, что означает ...
System.out.println(dateObj1);
System.out.println(dateObj2);
скорее всего напечатает null
, а ...
long diff = dateObj2.getTime() - dateObj1.getTime();
не скомпилируется, потому что dateObj1
и dateObj2
просто определены как Object
, а Object
- нетиметь getTime
метод
Расчеты даты / времени являются сложными и регулируются множеством различных правил (дополнительно усложняемых типом календаря, который вы используете)
Просто выполняйте...
double diffInHours = diff / ((double) 1000 * 60 * 60);
в лучшем случае наивен, в худшем - сломан
И ...
System.out.println("Minutes " + (diffInHours - (int)diffInHours)*60 );
ну, бессмысленно, что за (something - something) * 60
?