2014-09-25 83 views
3

我想計算兩次計算正確的差值,然後我必須計算一半,所以我將它與2個結果相除。但是,當我試圖添加timdedifferencemillis到開始時間它不是給我正確的結果......如何在android中添加兩毫秒

開始時間= 05:53
結束時間= 17:57
我想要的結果11:55
但我代碼給我06:55
請幫助.....

protected String transitTime2(String endtime, String starttime) { 
    SimpleDateFormat dt = new SimpleDateFormat("hh:mm"); 
    Date startTime = null; 
    Date endTime; 
    long timdedifferencemillis = 0; 
    try { 
     startTime = dt.parse(starttime); 
     endTime = dt.parse(endtime); 
     long diff=startTime.getTime(); 
     timdedifferencemillis = (endTime.getTime() - startTime.getTime())/2; 
     //timdedifferencemillis 

    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
    long timdedifferencemillis1=startTime.getTime()+timdedifferencemillis; 

    int minutes = Math 
      .abs((int) ((timdedifferencemillis1/(1000 * 60)) % 60)); 
    int hours = Math 
      .abs((int) ((timdedifferencemillis1/(1000 * 60 * 60)) % 24)); 
    String hmp = String.format("%02d %02d ", hours, minutes); 
    return hmp; 
} 
+1

17:57 - 05:53 = 12:04。你爲什麼期望11:55,爲什麼你除以2? – 2014-09-25 17:11:28

+0

哦,你正試圖找到中間的時間? – 2014-09-25 17:14:23

+0

@DavidConrad是的你是對的12.04是差異,其一半是06:02。現在我想在startTime中添加06:02。所以05:53 + 06:02 = 11:55。多數民衆贊成在我想要做的,如果你可以請建議的東西... – 2014-09-26 13:58:45

回答

2

問題可能是時區;當您最初解析endtimestarttime時,默認情況下(缺少格式字符串中指示的並且在輸入中表示的明確時區),Java假定所提供的時間相對於系統的本地時區相對於。然後,當你調用getTime(),它返回

自1970年1月1日的毫秒數日00:00:00 GMT 通過Date對象表示

一種解決方案是要告訴你的SimpleDateFormat對象假設它分析的所有字符串都在GMT中,而不是在本地時區中。嘗試加入這一行初始化dt後,但調用dt.parse(...)前:

dt.setTimeZone(TimeZone.getTimeZone("GMT")); 
0

我認爲這個問題是類型的「長」,並在你的代碼「INT」;當我們與2(長timdedifferencemillis)劃分的結果必須是「雙」。

0

這是很容易在Java中8或與JODA時間庫與新java.time API來完成:

import java.time.Duration; 
import java.time.LocalTime; 

public class TimeDiff { 
    public static void main(String[] args) { 
     LocalTime start = LocalTime.parse("05:53"); 
     LocalTime end = LocalTime.parse("17:57"); 
     // find the duration between the start and end times 
     Duration duration = Duration.between(start, end); 
     // add half the duration to the start time to find the midpoint 
     LocalTime midPoint = start.plus(duration.dividedBy(2)); 
     System.out.println(midPoint); 
    } 
} 

輸出:

11:55

通過使用LocalTime對象,可以避免時區出現任何問題。

+0

謝謝大衛康拉德 – 2014-09-26 16:09:17