¿Cómo calcular la diferencia de tiempo en Java?

Quiero restar dos periodos de tiempo, por ejemplo, 16:00:00 a partir de las 19:00:00. ¿Hay alguna función java para esto? Los resultados pueden ser en milisegundos, segundos o segundos.

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(); 

La diferencia es en milisegundos.

Modifiqué la publicación de sfaizs .

Java 8 tiene una solución más limpia : Instantánea y Duración

Ejemplo:

 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"); 

PARA obtener bonitas diferencias de tiempo, entonces

 // 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."); 

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(); 

Como cualquier otro idioma; convierta sus períodos de tiempo a una marca de tiempo de Unix (es decir, segundos desde la época de Unix) y luego simplemente reste. Luego, los segundos resultantes se deben usar como una nueva marca de tiempo de unix y se deben formatear en el formato que desee.

Ah, dale al poster de arriba (genesiss) su crédito, el código siempre es útil;) Sin embargo, ahora también tienes una explicación 🙂

 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. 

y, para mostrar en un formato más agradable, puede usar:

  DecimalFormat myDecimalFormatter = new DecimalFormat("###,###.###"); System.out.println(myDecimalFormatter.format(((double)d2.getTime()-d1.getTime())/1000)); 

La forma dolorosa es convertir a millis y hacer la resta y luego volver a los segundos que usted desee. La mejor manera es usar JodaTime .

Opción alternativa si se toma el tiempo de días diferentes, por ejemplo: 22:00 y 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); } 
 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; 

Ahora los minutos serán la duración correcta entre dos veces (en minutos).

 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 maneja excepciones de análisis

  /* * 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(); } } 

clase 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; } }} 
 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(); } } 

}