2014-09-25 77 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