2011-02-07 57 views

Trả lời

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

Sự khác biệt bằng mili giây.

Tôi đã sửa đổi sfaizs post.

+6

gì về cách thức khác? 16:00 - 19:00? Làm thế nào tôi có thể tính toán điều này? –

+0

@AlexKapustian bạn đảo ngược các biến ... – Av4t4r

+0

Đảo ngược các biến sẽ không làm tốt lắm .. Trong ví dụ này, chắc chắn, bạn có thể đảo ngược chúng và lấy giá trị tuyệt đối hoặc một cái gì đó. Nhưng điều gì sẽ xảy ra nếu bạn có nửa đêm (00:00)? – rj2700

10

Giống như bất kỳ ngôn ngữ nào khác; chuyển đổi các khoảng thời gian của bạn thành một dấu thời gian unix (ví dụ, giây kể từ thời đại Unix) và sau đó đơn giản là trừ đi. Sau đó, các giây kết quả sẽ được sử dụng làm dấu thời gian unix mới và đọc được định dạng theo bất kỳ định dạng nào bạn muốn.

Ah, cho các poster trên (genesiss) tín dụng do mình, mã luôn có ích;) Mặc dù, bây giờ bạn có một lời giải thích cũng :)

2

Cách đau đớn là để chuyển đổi sang millis và làm phép trừ và sau đó trở lại bất cứ giây nào bạn muốn. Cách tốt hơn là sử dụng JodaTime.

+1

Hoặc ... uhm ... unix timestamp?AFAIK Java có các lớp thời gian tốt .. – Christian

+1

Tôi chưa bao giờ đề cập đến dấu thời gian unix. Ngoài ra nó là một thực tế nổi tiếng rằng Java ngày và thời gian API hút cho nhiều hơn sử dụng không thường xuyên. JodaTime là tốt hơn nhiều và có lẽ là con đường để đi cho đến khi JSR 310 là một phần của Java. http://sourceforge.net/apps/mediawiki/threeten/index.php?title=ThreeTen –

+0

@Manfred Moser: có thể bạn nên có ... Cả hai lớp thời gian Java mặc định và Joda cho thời gian bằng milli bắt đầu từ những gì được gọi là ** Unix ** epoch. Tại thời điểm này họ trở nên gần gũi với ** Unix ** timestamps (một đang được tính bằng millis, cái kia tính bằng giây). Trong mọi trường hợp, những gì OP muốn có thể được thực hiện một cách tầm thường bằng cách sử dụng các lớp Java mặc định, lấy số lượng millis kể từ kỷ nguyên ** Unix ** và trừ đi chúng. – SyntaxT3rr0r

23

ĐẾN nhận được khá thời gian khác nhau, sau đó

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

Kỹ thuật tuyệt vời – hadi

+0

câu trả lời thực sự tuyệt vời – 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

Điều này cũng có sẵn cho Java SE 6 và 7 là [cổng sau] (https://github.com/ThreeTen/threetenbp), cũng như cho [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. 

và, để hiển thị trong một định dạng đẹp hơn, bạn có thể sử dụng:

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

Điều này sao y một câu trả lời khác và không thêm nội dung mới. Vui lòng không đăng câu trả lời trừ khi bạn thực sự có nội dung mới để đóng góp. – DavidPostill

+0

@DavidPostill, cảm ơn bạn đã đầu lên. Nhưng giải pháp tôi cần và không tìm thấy trong bài viết của GENESIS là sự khác biệt thời gian giữa việc thực hiện hai dòng mã (như điểm xuất phát và điểm kết thúc của chương trình hoặc trước và sau khi chạy một phương thức, không phải một số lần tĩnh). Tôi nghĩ điều này có thể hữu ích. – Alisa

37

Java 8 có cleaner solution - Instant và Duratio n

Ví dụ:

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

tùy chọn Аlternative nếu thời gian từ những ngày khác nhau được thực hiện, ví dụ: 22:00 và 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

Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung liên quan đến * lý do * và/hoặc * cách * mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó. –

0

lớp TimeCalculator { Chuỗi 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; 

Bây giờ phút sẽ là thời gian chính xác giữa hai thời gian (trong phút).

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

ném ngoại lệ xử lý ngoại lệ phân tích

Các vấn đề liên quan