如何在android中添加两毫秒

时间:2014-09-25 16:46:54

标签: java android eclipse mobile

我想计算两次之间的差异,这是正确计算然后我必须减半它所以我除以2结果是好的。但当我试图将timdedifferencemillis添加到startTime时,它没有给我正确的结果......

starttime = 05:53
endtime = 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;
}

3 个答案:

答案 0 :(得分:2)

问题可能是时区;当您最初解析endtimestarttime时,默认情况下(在格式字符串中没有显示时间区并在输入中表示),Java假定提供的时间是相对于<系统的强>本地时区。然后,当您致电getTime()时,它会返回

  

Date对象所代表的自1970年1月1日00:00:00 GMT 以来的毫秒数

一种解决方案是告诉您的SimpleDateFormat对象假设它解析的所有字符串都是GMT,而不是本地时区。在初始化dt之后,但在调用dt.parse(...)之前尝试添加此行:

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

答案 1 :(得分:1)

使用Java 8中的新java.time API或使用JODA时间库,这很容易做到:

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个对象,可以避免出现时区问题。

答案 2 :(得分:0)

我认为问题在于代码中的“long”和“int”类型;当我们除以2(long timdedifferencemillis)时,结果必须是“double”。