2011-02-07 34 views

Respuesta

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

Diferencia en milisegundos.

Modifiqué sfaizs post.

+6

qué pasa con el otro lado? ¿16:00 a 19:00? ¿Cómo puedo calcular esto? –

+0

@AlexKapustian inviertes las variables ... – Av4t4r

+0

Invertir las variables no servirá de mucho ... En este ejemplo, seguro, podrías invertirlas y tomar el valor absoluto o algo así. ¿Pero qué pasa si tienes la medianoche (00:00)? – rj2700

10

Al igual que en 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 se desee.

Ah, dar el cartel anterior (genesiss) a su debido crédito, el código es siempre útil;) Aunque, ahora tiene una explicación, así :)

2

La forma más dolorosa es la de convertir a Millis y hacer la resta y luego vuelve a los segundos que quieras. La mejor manera es usar JodaTime.

+1

O ... uhm ... ¿timestamp de unix?AFAIK Java tiene buenas clases de tiempo ... – Christian

+1

Nunca mencioné las marcas de tiempo de Unix. También es un hecho bien conocido que la API de fecha y hora de Java es más útil que el uso ocasional. JodaTime es mucho mejor y probablemente sea el camino a seguir hasta que JSR 310 forme parte de Java. http://sourceforge.net/apps/mediawiki/threeten/index.php?title=ThreeTen –

+0

@Manfred Moser: puede que debas ... Tanto las clases de tiempo predeterminadas de Java como Joda dan un tiempo en millis que comienza desde se llama la época ** Unix **. En este punto, se vuelven muy cercanos a las marcas de tiempo ** Unix ** (una en milisegundos, la otra en segundos). En cualquier caso, lo que desea el OP se puede hacer trivialmente usando las clases Java predeterminadas, tomando el número de milis desde la época ** Unix ** y restandolas. – SyntaxT3rr0r

23

para conseguir bastante las diferencias temporales y, a continuación

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

Awesome technique – hadi

+0

realmente genial respuesta – Palanivelraghul

25

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

Esto también está disponible para Java SE 6 y 7 como [back port] (https://github.com/ThreeTen/threetenbp), así como para [Android] (https: // github.com/JakeWharton/ThreeTenABP). – Bryan

5
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 cómodo, puede utilizar:

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

Esto duplica otra respuesta y no agrega contenido nuevo. Por favor, no publique una respuesta a menos que realmente tenga algo nuevo para contribuir. – DavidPostill

+0

@DavidPostill, gracias por su información. Pero la solución que necesitaba y no encontré en la publicación de GENESIS fue la diferencia de tiempo entre la ejecución de dos líneas de código (como el punto de inicio y el punto final del programa o antes y después de ejecutar un método, no algunos tiempos estáticos) Pensé que esto podría ayudar. – Alisa

37

Java 8 tiene un cleaner solution - Instantáneo y Duratio 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"); 
1

opción Аlternative si el tiempo de diferentes días se toma 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); 
    } 
0
/* 
* 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(); 
    } 
} 
+1

Si bien este código puede responder a la pregunta, proporcionar contexto adicional con respecto a * why * y/o * cómo * este código responde la pregunta mejora su valor a largo plazo. –

0

TimeCalculator clase { cadena 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; 
    } 
}} 
1
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 minutos será la duración correcta entre dos tiempo (en minutos).

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

}

1
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); 
}} 

tiros excepción maneja excepciones análisis sintáctico

Cuestiones relacionadas