【发布时间】:2014-10-03 11:51:16
【问题描述】:
我在日历中有 2 次。
Calendar orarioP1 = new GregorianCalendar(2014, 3, 28, 8, 30, 00);
Calendar orarioA1 = new GregorianCalendar(2014, 3, 28, 12, 35, 06);
我实现了这个函数来获取时差,但它返回了 +1 小时的时差。
我需要返回正确的差异4:05:06,但现在它返回给我5:05:06。谁能帮帮我?
public String getTimeDiff() {
SimpleDateFormat sdf = new SimpleDateFormat("h:mm:ss");
long milliSec1 = orarioP1.getTimeInMillis();
long milliSec2 = orarioA1.getTimeInMillis();
long timeDifInMilliSec;
if(milliSec1 >= milliSec2) {
timeDifInMilliSec = milliSec1 - milliSec2;
} else {
timeDifInMilliSec = milliSec2 - milliSec1;
}
long timeDifSeconds = timeDifInMilliSec / 1000;
long timeDifMinutes = timeDifInMilliSec / (60 * 1000);
long timeDifHours = timeDifInMilliSec / (60 * 60 * 1000);
long timeDifDays = timeDifInMilliSec / (24 * 60 * 60 * 1000);
Date date = new Date(timeDifSeconds);
String difference = sdf.format(date);
return difference;
}
【问题讨论】:
-
这些事情几乎总是夏令时或时区差异的结果。快速浏览一下here,我们发现这个日期确实是 DST 开始实施的时间。
-
This approach 可能会有所帮助。
-
提示:(A) 了解 Joda-Time 库及其 Duration、Interval 和 Period 类来处理时间跨度。 Java 8 中新的 java.time 包可能有类似的。 (B) 始终在代码中指定您的预期时区。
标签: java date time difference milliseconds