2015-10-06 55 views
1

我發現時間差異,如果我嘗試在今天的時間(如t1 =「08:00:00」和t2 =「10:00:00」)發現差異,是正確的輸出,)但是當我試圖找到像t1 =「20:00:00」(這是今天的時間)和t2 =「08:00:00」(這是第二天早上)的差異,我想要輸出爲12小時,但由於輸出錯誤。請幫助我。爪哇發現時間之間的差異

String t1 = "20:00:00"; 
    String t2 = "12:00:00"; 
    String t3 = "24:00:00"; 
    SimpleDateFormat sDf = new SimpleDateFormat("HH:mm:ss"); 
    Date d1 = sDf.parse(t1); 
    Date d2 = sDf.parse(t2); 
    Date d3 = sDf.parse(t3); 
    long s1,s2,s3,s4,dif1,dif2,dif3,minutes,hrs; 
    dif1 = d2.getTime() - d1.getTime(); 
    s1 = dif1/1000; 
    System.out.println("s1 "+s1); 
    if(s1<0){ 
     dif2 = d3.getTime() - d1.getTime(); 
     s2 = dif2/1000; 
     System.out.println("s2 "+s2); 
     dif3 = d2.getTime(); 
     s3 = dif3/1000; 
     System.out.println("s3 "+s3); 
     s4 = s2+s3; 
     minutes = s4/60; 
     s4 = s4 % 60; 
     hrs = minutes/60; 
     minutes = minutes % 60; 
     System.out.println("time difference is : "+hrs+": "+minutes+" :"+s4); 
    }else{ 
     minutes = s1/60; 
     s1 = s1 % 60; 
     hrs = minutes/60; 
     minutes = minutes % 60; 
     System.out.println("time difference is : "+hrs+": "+minutes+" :"+s1); 
    } 
+0

http://crunchify.com/how-to-calculate-the-difference-between-two-java- date-instances/ –

+4

認真嗎?使用Java 8的Time API,使用Joda Time,如果你真的非常絕望,可以使用'Calendar',但不要這樣做! – MadProgrammer

+0

這個's4 = s2 + s3;'對我來說似乎很奇怪,你不應該把兩點之間的差加到第三點,而不是增加兩點('12:00'+'24:00')? – MadProgrammer

回答

2

看到一些選項here

如:

 LocalDate today = LocalDate.now() 
    LocalDate yeasterday = today.minusDays(1); 
    Duration oneDay = Duration.between(today, yesterday); 
    Duration.between(today.atTime(0, 0), yesterday.atTime(0, 0)).toDays() // another option 
0
String time1 = "08:00:00"; 
String time2 = "17: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(); 
3

任何日期/時間的操作/計算應該做的事,雖然定義使用的很好,像Java 8的測試的API Time API或Joda Time

Java 8

public class TestTime { 

    public static void main(String[] args) { 
     // Because of the ability for the time to roll over to the next 
     // day, we need the date component to make sense of it, for example 
     // 24:00 is actually 00:00 of the next day ... joy 
     LocalDateTime t1 = LocalTime.of(20, 00).atDate(LocalDate.now()); 
     LocalDateTime t2 = LocalTime.of(12, 00).atDate(LocalDate.now()); 
     LocalDateTime t3 = LocalTime.MIDNIGHT.atDate(LocalDate.now()).plusDays(1); 

     if (t1.isAfter(t2)) { 
      System.out.println("Before"); 
      Duration duration = Duration.between(t2, t3); 
      System.out.println(format(duration)); 
     } else { 
      System.out.println("After"); 
      Duration duration = Duration.between(t2, t1); 
      System.out.println(format(duration)); 
     } 
    } 

    public static String format(Duration duration) { 
     long hours = duration.toHours(); 
     duration = duration.minusHours(hours); 

     return String.format("%02d hours %02d minutes", hours, duration.toMinutes()); 
    } 

} 

,輸出

12 hours 00 minutes 

我似乎無法在你的代碼來回答的問題是,爲什麼你這樣做s4 = s2+s3;,基本上添加12:0024:00

0

不使用Java 8或Joda-時間,並確保不涉及當地時區DST。

public static void printDiff(String time1, String time2) throws ParseException { 
    SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss"); 
    df.setTimeZone(TimeZone.getTimeZone("UTC")); 
    int seconds = (int)(df.parse(time2).getTime() - df.parse(time1).getTime())/1000; 
    if (seconds < 0) 
     seconds += 24 * 60 * 60; 
    int minutes = seconds/60; 
    int hours = minutes/60; 
    seconds %= 60; 
    minutes %= 60; 
    System.out.printf("There are %d hours %d minutes %d seconds from %s to %s%n", 
         hours, minutes, seconds, time1, time2); 
} 

測試

public static void main(String[] args) throws Exception { 
    printDiff("08:00:00", "10:00:00"); 
    printDiff("20:00:00", "08:00:00"); 
    printDiff("15:47:22", "11:12:38"); 
    printDiff("08:00:00", "07:59:59"); 
    printDiff("08:00:00", "08:00:00"); 
} 

輸出

There are 2 hours 0 minutes 0 seconds from 08:00:00 to 10:00:00 
There are 12 hours 0 minutes 0 seconds from 20:00:00 to 08:00:00 
There are 19 hours 25 minutes 16 seconds from 15:47:22 to 11:12:38 
There are 23 hours 59 minutes 59 seconds from 08:00:00 to 07:59:59 
There are 0 hours 0 minutes 0 seconds from 08:00:00 to 08:00:00