I use some kind of stopwatch in my project and I have
start time ex: 18:40:10 h
stop time ex: 19:05:15 h
I need a result from those two values like final time = stop - start
I found some examples but they all are very confusing .
Is there any simple solution ?
String start = "12:00:00"; String end = "02:05:00"; SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); Date date1 = format. parse(start); Date date2 = format. parse(end); long difference = date2. getTime() - date1.
I need to Calculate the TotalTime by subtracting the EndTime with StartTime. The Format of StartTime and EndTime is as like follows: StartTime = "08:00 AM"; EndTime = "04:00 PM"; TotalTime in Hours and Mins Format.
We can use the cal. add(unit, amount) method for adding and subtracting time. If the amount was positive number then specified amount of specified unit of time is added to the calendar. If the amount was negative number then specified amount of specified unit of time is subtracted from the calendar.
I am providing the modern answer.
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("H:mm:ss 'h'");
String startTimeString = "18:40:10 h";
String stopTimeString = "19:05:15 h";
LocalTime startTime = LocalTime.parse(startTimeString, timeFormatter);
LocalTime stopTime = LocalTime.parse(stopTimeString, timeFormatter);
if (stopTime.isBefore(startTime)) {
System.out.println("Stop time must not be before start time");
} else {
Duration difference = Duration.between(startTime, stopTime);
long hours = difference.toHours();
difference = difference.minusHours(hours);
long minutes = difference.toMinutes();
difference = difference.minusMinutes(minutes);
long seconds = difference.getSeconds();
System.out.format("%d hours %d minutes %d seconds%n", hours, minutes, seconds);
}
Output from this example is:
0 hours 25 minutes 5 seconds
The other answers were good answers in 2010. Today avoid the classes DateFormat
, SimpleDateFormat
and Date
. java.time, the modern Java date and time API, is so much nicer to work with.
No, using java.time works nicely on older and newer Android devices. It just requires at least Java 6.
org.threeten.bp
with subpackages.java.time
was first described.java.time
to Java 6 and 7 (ThreeTen for JSR-310).If you have strings you need to parse them into a java.util.Date using java.text.SimpleDateFormat. Something like:
java.text.DateFormat df = new java.text.SimpleDateFormat("hh:mm:ss");
java.util.Date date1 = df.parse("18:40:10");
java.util.Date date2 = df.parse("19:05:15");
long diff = date2.getTime() - date1.getTime();
Here diff is the number of milliseconds elapsed between 18:40:10 and 19:05:15.
EDIT 1:
Found a method online for this (at http://www.javaworld.com/javaworld/jw-03-2001/jw-0330-time.html?page=2):
int timeInSeconds = diff / 1000;
int hours, minutes, seconds;
hours = timeInSeconds / 3600;
timeInSeconds = timeInSeconds - (hours * 3600);
minutes = timeInSeconds / 60;
timeInSeconds = timeInSeconds - (minutes * 60);
seconds = timeInSeconds;
EDIT 2:
If you want it as a string (this is a sloppy way, but it works):
String diffTime = (hours<10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds < 10 ? "0" + seconds : seconds) + " h";
EDIT 3:
If you want the milliseconds just do this
long timeMS = diff % 1000;
You can then divide that by 1000 to get the fractional part of your seconds.
Assuming you are using java.util.Date:
long totalTime = endDate.getTime() - startDate.getTime();
The result will be the total time in milliseconds.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With