2011-02-07 5 views

ответ

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

Разница в миллисекундах.

I модифицировано sfaizs post.

+6

насчет другого пути? 16:00 - 19:00? Как я могу рассчитать это? –

+0

@AlexKapustian вы инвертируете переменные ... – Av4t4r

+0

Инвертирование переменных не принесет много пользы. В этом примере, конечно, вы можете инвертировать их и принять абсолютное значение или что-то еще. Но что произойдет, если у вас полночь (00:00)? – rj2700

10

Как и на любом другом языке; конвертируйте ваши периоды времени в временную метку unix (т. е. секунды с эпохи Unix), а затем просто вычтите. Затем полученные секунды должны использоваться как новая временная метка unix и считаться отформатированными в любом формате.

Ах, дайте выше плакат (genesiss) его должное, код всегда удобно;) Хотя, теперь у вас есть объяснение, а :)

2

Болевой способ преобразовать Millis и сделать вычитание а затем обратно в любые секунды или так вы хотите. Лучший способ - использовать JodaTime.

+1

Или ... uhm ... unix timestamp?AFAIK Java имеет хорошие классы времени. – Christian

+1

Я никогда не упоминал временные метки unix. Также хорошо известно, что Java Date and Time API отстой для более чем случайного использования. JodaTime намного лучше и, вероятно, путь, пока JSR 310 не станет частью Java. http://sourceforge.net/apps/mediawiki/threeten/index.php?title=ThreeTen –

+0

@Manfred Moser: возможно, у вас должно быть ... Оба класса Java по умолчанию и Joda дают время в миллисе, начиная с чего называется эпохой ** Unix **. В этот момент они становятся чертовыми рядом с ** временными отметками Unix ** (один находится в миллисе, другой - в секундах). В любом случае то, что хочет OP, можно сделать тривиально, используя классы Java по умолчанию, принимая число миллисов с момента ** ** Unix ** и вычитая их. – SyntaxT3rr0r

23

получить довольно временные разницы, то

// 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

Удивительная техника – hadi

+0

действительно отличный ответ – 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

Это также доступно для Java SE 6 и 7 как [back port] (https://github.com/ThreeTen/threetenbp), а также для [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. 

и, чтобы показать в более удобном формате, вы можете использовать:

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

Это дублирует другой ответ и не добавляет нового контента. Пожалуйста, не публикуйте ответ, если у вас нет чего-то нового для участия. – DavidPostill

+0

@DavidPostill, спасибо за ваши головы. Но решение, в котором я нуждался, и не нашел в сообщении GENESIS, было разницу во времени между выполнением двух строк кода (например, начальная и конечная точки программы или до и после запуска метода, а не какое-то статическое время). Я думал, что это может помочь. – Alisa

37

Java 8 имеет cleaner solution - Instant and Duratio п

Пример:

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

Аlternative вариант, если время от разных дней берется, например: 22:00 и 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

Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно * why * и/или * как * этот код отвечает на вопрос, улучшает его долгосрочную ценность. –

0

класс TimeCalculator { Строка 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; 

Теперь минут будет правильно длительность между двумя раз (в минуту).

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

бросает исключение обрабатывает разборе исключения

Смежные вопросы