How to calculate time difference in java?

I want to subtract two time intervals, for example, 16:00:00 from 19:00:00. Is there any java function for this? Results can be in milliseconds, seconds or minutes.

+82
java
Feb 07 '11 at 23:19
source share
17 answers
String time1 = "16:00:00"; String time2 = "19:00:00"; SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); Date date1 = format.parse(time1); Date date2 = format.parse(time2); long difference = date2.getTime() - date1.getTime(); 

The difference in milliseconds.

I changed the sfaizs post .

+110
07 Feb 2018-11-23 at
source share

Java 8 has a cleaning solution - Instant and Duration

Example:

 import java.time.Duration; import java.time.Instant; ... Instant start = Instant.now(); //your code Instant end = Instant.now(); Duration timeElapsed = Duration.between(start, end); System.out.println("Time taken: "+ timeElapsed.toMillis() +" milliseconds"); 
+76
Dec 31 '15 at 5:30
source share

To get excellent time differences then

 // d1, d2 are dates long diff = d2.getTime() - d1.getTime(); long diffSeconds = diff / 1000 % 60; long diffMinutes = diff / (60 * 1000) % 60; long diffHours = diff / (60 * 60 * 1000) % 24; long diffDays = diff / (24 * 60 * 60 * 1000); System.out.print(diffDays + " days, "); System.out.print(diffHours + " hours, "); System.out.print(diffMinutes + " minutes, "); System.out.print(diffSeconds + " seconds."); 
+36
Dec 28
source share

Java 8

 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime dateTime1= LocalDateTime.parse("2014-11-25 19:00:00", formatter); LocalDateTime dateTime2= LocalDateTime.parse("2014-11-25 16:00:00", formatter); long diffInMilli = java.time.Duration.between(dateTime1, dateTime2).toMillis(); long diffInSeconds = java.time.Duration.between(dateTime1, dateTime2).getSeconds(); long diffInMinutes = java.time.Duration.between(dateTime1, dateTime2).toMinutes(); 
+30
Nov 25 '14 at 18:08
source share

Like any other language; convert your time periods to a unix timestamp (i.e. seconds from the Unix era) and then simply subtract. Then, the seconds received should be used as the new unix timestamp and be considered formatted in whatever format you want.

Ah, give the above poster (genesiss) its due credit, the code is always convenient;) Although, now you have an explanation :)

+11
07 Feb 2018-11-21T00:
source share
 import java.util.Date; ... Date d1 = new Date(); ... ... Date d2 = new Date(); System.out.println(d2.getTime()-d1.getTime()); //gives the time difference in milliseconds. System.out.println((d2.getTime()-d1.getTime())/1000); //gives the time difference in seconds. 

and to show in a more convenient format, you can use:

  DecimalFormat myDecimalFormatter = new DecimalFormat("###,###.###"); System.out.println(myDecimalFormatter.format(((double)d2.getTime()-d1.getTime())/1000)); 
+7
Mar 21 '15 at 0:26
source share

A painful way is to convert to millis and subtract, and then back to any seconds or the way you want. Best to use JodaTime .

+2
Feb 07 2018-11-21T00:
source share
 import java.text.SimpleDateFormat; import java.util.Date; public class Main { public static void main(String[] args) throws Exception{ String time1 = "12:00:00"; String time2 = "12:01:00"; SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); Date date1 = format.parse(time1); Date date2 = format.parse(time2); long difference = date2.getTime() - date1.getTime(); System.out.println(difference/1000); }} 

throws exceptions handles exceptions for parsing

+2
Aug 01 '17 at 16:30
source share

An alternative option if the time is running from different days, for example: 22:00 and 01:55.

 public static long getDiffTime(Date date1, Date date2){ if (date2.getTime() - date1.getTime() < 0) {// if for example date1 = 22:00, date2 = 01:55. Calendar c = Calendar.getInstance(); c.setTime(date2); c.add(Calendar.DATE, 1); date2 = c.getTime(); } //else for example date1 = 01:55, date2 = 03:55. long ms = date2.getTime() - date1.getTime(); //235 minutes ~ 4 hours for (22:00 -- 01:55). //120 minutes ~ 2 hours for (01:55 -- 03:55). return TimeUnit.MINUTES.convert(ms, TimeUnit.MILLISECONDS); } 
+1
Feb 26 '16 at 18:32
source share
 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.getTime(); int minutes = (int) TimeUnit.MILLISECONDS.toMinutes(difference); if(minutes<0)minutes += 1440; 

Now the minutes will be the correct duration between two moments (per minute).

+1
Aug 21 '16 at 17:26
source share

In addition to the most common approach to Period and Duration objects, you can expand your knowledge in another way of working with time in Java.

Java Advanced Libraries 8. ChronoUnit for differences.

ChronoUnit is a great way to determine how far away are two time values. Temporal includes LocalDate, LocalTime, and so on.

 LocalTime one = LocalTime.of(5,15); LocalTime two = LocalTime.of(6,30); LocalDate date = LocalDate.of(2019, 1, 29); System.out.println(ChronoUnit.HOURS.between(one, two)); //1 System.out.println(ChronoUnit.MINUTES.between(one, two)); //75 System.out.println(ChronoUnit.MINUTES.between(one, date)); //DateTimeException 

The first example shows that between truncated rather than rounds.

The second shows how easy it is to count different units.

And the last example reminds us that we should not be confused with dates and times in Java :)

+1
Jan 29 '19 at 19:31
source share
  /* * Total time calculation. */ private void getTotalHours() { try { // TODO Auto-generated method stub if (tfTimeIn.getValue() != null && tfTimeOut.getValue() != null) { Long min1 = tfTimeOut.getMinutesValue(); Long min2 = tfTimeIn.getMinutesValue(); Long hr1 = tfTimeOut.getHoursValue(); Long hr2 = tfTimeIn.getHoursValue(); Long hrsTotal = new Long("0"); Long minTotal = new Long("0"); if ((hr2 - hr1) == 1) { hrsTotal = (long) 1; if (min1 != 0 && min2 == 0) { minTotal = (long) 60 - min1; } else if (min1 == 0 && min2 != 0) { minTotal = min2; } else if (min1 != 0 && min2 != 0) { minTotal = min2; Long minOne = (long) 60 - min1; Long minTwo = min2; minTotal = minOne + minTwo; } if (minTotal >= 60) { hrsTotal++; minTotal = minTotal % 60; } } else if ((hr2 - hr1) > 0) { hrsTotal = (hr2 - hr1); if (min1 != 0 && min2 == 0) { minTotal = (long) 60 - min1; } else if (min1 == 0 && min2 != 0) { minTotal = min2; } else if (min1 != 0 && min2 != 0) { minTotal = min2; Long minOne = (long) 60 - min1; Long minTwo = min2; minTotal = minOne + minTwo; } if (minTotal >= 60) { minTotal = minTotal % 60; } } else if ((hr2 - hr1) == 0) { if (min1 != 0 || min2 != 0) { if (min2 > min1) { hrsTotal = (long) 0; minTotal = min2 - min1; } else { Notification.show("Enter A Valid Time"); tfTotalTime.setValue("00.00"); } } } else { Notification.show("Enter A Valid Time"); tfTotalTime.setValue("00.00"); } String hrsTotalString = hrsTotal.toString(); String minTotalString = minTotal.toString(); if (hrsTotalString.trim().length() == 1) { hrsTotalString = "0" + hrsTotalString; } if (minTotalString.trim().length() == 1) { minTotalString = "0" + minTotalString; } tfTotalTime.setValue(hrsTotalString + ":" + minTotalString); } else { tfTotalTime.setValue("00.00"); } } catch (Exception e) { e.printStackTrace(); } } 
0
Apr 08 '16 at 3:49 on
source share

class TimeCalculator {String updateTime;

  public TimeCalculator(String time) { // time should be in 24 hours format like 15/06/2016 17:39:20 this.updateTime = time; } public String getTimeDifference() { String td=null; // get Current Time SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); Date currentDate = new Date(); Calendar calendar = new GregorianCalendar(); calendar.setTime(currentDate); int c_year = calendar.get(Calendar.YEAR); int c_month = calendar.get(Calendar.MONTH) + 1; int c_day = calendar.get(Calendar.DAY_OF_MONTH); // get Editing Time Date edit_date = sdf.parse(updateTime); Calendar edit_calendar = new GregorianCalendar(); edit_calendar.setTime(edit_date); int e_year = edit_calendar.get(Calendar.YEAR); int e_month = edit_calendar.get(Calendar.MONTH) + 1; int e_day = edit_calendar.get(Calendar.DAY_OF_MONTH); if(e_year==c_year&&e_month==c_month&&e_day==c_day) { int c_hours = calendar.get(Calendar.HOUR_OF_DAY); int c_minutes = calendar.get(Calendar.MINUTE); int c_seconds = calendar.get(Calendar.SECOND); int e_hours = edit_calendar.get(Calendar.HOUR_OF_DAY); int e_minutes = edit_calendar.get(Calendar.MINUTE); int e_seconds = edit_calendar.get(Calendar.SECOND); if(c_hours==e_hours&&c_minutes==e_minutes&&c_seconds==e_seconds) { td = "just now"; return td; } else if(c_hours==e_hours&&c_minutes==e_minutes) { int d_seconds = c_seconds-e_seconds; td = String.valueOf(d_seconds); td = td+" seconds ago"; return td; } else if(c_hours==e_hours&&c_minutes!=e_minutes) { int d_minutes = c_minutes-e_minutes; int d_seconds; if(c_seconds>e_seconds) { d_seconds = c_seconds-e_seconds; }else{ d_seconds = e_seconds-c_seconds; } td = "00:"+String.valueOf(d_minutes)+":"+String.valueOf(d_seconds)+" ago"; return td; } else { int d_minutes,d_seconds,d_hours; d_hours=c_hours-e_hours; if(c_minutes>e_minutes) { d_minutes = c_minutes-e_minutes; }else{ d_minutes = e_minutes-c_minutes; } if(c_seconds>e_seconds) { d_seconds = c_seconds-e_seconds; }else{ d_seconds = e_seconds-c_seconds; } td = String.valueOf(d_hours)+":"+String.valueOf(d_minutes)+":"+String.valueOf(d_seconds)+" ago"; return td; } } else if(e_year==c_year&&e_month==c_month&&c_day==e_day+1){ td = "yesterday"; return td; } else{ td = updateTime; return td; } }} 
0
Jun 17 '16 at 12:37
source share
 public class timeDifference { public static void main(String[] args) { try { Date startTime = Calendar.getInstance().getTime(); Thread.sleep(10000); Date endTime = Calendar.getInstance().getTime(); long difference = endTime.getTime() - startTime.getTime(); long differenceSeconds = difference / 1000 % 60; long differenceMinutes = difference / (60 * 1000) % 60; long differenceHours = difference / (60 * 60 * 1000) % 24; long differenceDays = difference / (24 * 60 * 60 * 1000); System.out.println(differenceDays + " days, "); System.out.println(differenceHours + " hours, "); System.out.println(differenceMinutes + " minutes, "); System.out.println(differenceSeconds + " seconds."); } catch (Exception e) { e.printStackTrace(); } } 

}

0
Oct 31 '16 at 9:07
source share
 import java.sql.*; class Time3 { public static void main(String args[]){ String time1 = "01:03:23"; String time2 = "02:32:00"; long difference ; Time t1 = Time.valueOf(time1); Time t2 = Time.valueOf(time2); if(t2.getTime() >= t1.getTime()){ difference = t2.getTime() - t1.getTime() -19800000; } else{ difference = t1.getTime() - t2.getTime() -19800000; } java.sql.Time time = new java.sql.Time(difference); System.out.println(time); } } 
0
Aug 21 '19 at 8:42
source share

I found it cleaner.

  Date start = new Date(); //Waiting for 10 seconds Thread.sleep(10000); Date end = new Date(); long diff = end.getTime() - start.getTime(); String TimeTaken = String.format("[%s] hours : [%s] mins : [%s] secs", Long.toString(TimeUnit.MILLISECONDS.toHours(diff)), TimeUnit.MILLISECONDS.toMinutes(diff), TimeUnit.MILLISECONDS.toSeconds(diff)); System.out.println(String.format("Time taken %s", TimeTaken)); 

Output : Time taken [0] hours: [0] mins: [10] secs

0
Sep 17 '19 at 6:43
source share

Try this:

 public String timeDifference8(String startTime, String endTime) { LocalTime initialTime = LocalTime.parse(startTime); LocalTime finalTime =LocalTime.parse(endTime); StringJoiner joiner = new StringJoiner(":"); long hours = initialTime.until( finalTime, ChronoUnit.HOURS); initialTime = initialTime.plusHours( hours ); long minutes = initialTime.until(finalTime, ChronoUnit.MINUTES); initialTime = initialTime.plusMinutes( minutes ); long seconds = initialTime.until( finalTime, ChronoUnit.SECONDS); joiner.add(String.valueOf(hours)); joiner.add(String.valueOf(minutes)); joiner.add(String.valueOf(seconds)); return joiner.toString(); } 
-one
Jan 22 '19 at 11:17
source share



All Articles