我想计算两次之间的差异,这是正确计算然后我必须减半它所以我除以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;
}
答案 0 :(得分:2)
问题可能是时区;当您最初解析endtime
和starttime
时,默认情况下(在格式字符串中没有显示时间区并在输入中表示),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”。