I should like to contribute the modern answer.
java.time and ThreeTenABP
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH);
String startTime = "08:00 AM";
String endTime = "04:00 PM";
LocalTime start = LocalTime.parse(startTime, timeFormatter);
LocalTime end = LocalTime.parse(endTime, timeFormatter);
Duration diff = Duration.between(start, end);
long hours = diff.toHours();
long minutes = diff.minusHours(hours).toMinutes();
String totalTimeString = String.format("%02d:%02d", hours, minutes);
System.out.println("TotalTime in Hours and Mins Format is " + totalTimeString);
The output from this snippet is:
TotalTime in Hours and Mins Format is 08:00
(Tested on Java 1.7.0_67 with ThreeTen Backport.)
The datetime classes used in the other answers — SimpleDateFormat
, Date
, DateFormat
and Calendar
— are all long outdated and poorly designed. Possibly worse, one answer is parsing and calculating “by hand”, without aid from any library classes. That is complicated and error-prone and never recommended. Instead I am using java.time, the modern Java date and time API. It is so much nicer to work with.
Question: Can I use java.time on Android?
Yes, java.time works nicely on older and newer Android devices. It just requires at least Java 6.
- In Java 8 and later and on newer Android devices (from API level 26) the modern API comes built-in.
- In Java 6 and 7 get the ThreeTen Backport, the backport of the modern classes (ThreeTen for JSR 310; see the links at the bottom).
- On (older) Android use the Android edition of ThreeTen Backport. It’s called ThreeTenABP. And make sure you import the date and time classes from
org.threeten.bp
with subpackages: org.threeten.bp.Duration
, org.threeten.bp.LocalTime
and org.threeten.bp.format.DateTimeFormatter
.
Links