我打算设计一个应用程序,我需要在两个日期之间得到确切的时间差。例如:
Date1:31/05/2011 12:54:00
Date2:31/05/2011 13:54:00
我尝试使用getTime()
,但我没有得到确切的结果。
上述输入的预期输出为3600000
(60 * 60 * 1000)毫秒,但我得到46800000
(13 * 60 * 60 * 1000)。
当我浏览不同的java论坛时,人们建议使用JodaTime。
我仍然无法得到确切的结果。
我工作的时区是伦敦(GMT)。
答案 0 :(得分:7)
初始化两个dateTime并使用Period:
DateTime dt1 = new DateTime(2013,9,11,9,58,56);
DateTime dt2 = new DateTime(2013,9,11,9,58,59);
Period p = new Period(dt1, dt2, PeriodType.millis());
以毫秒为单位获得差异:
System.out.println(p.getValue(0));
答案 1 :(得分:6)
public static long getDiff(Calender cal1, Calender cal2)
{
return Math.abs(cal1.getTimeInMillis() - cal2.getTimeInMillis());
}
答案 2 :(得分:4)
创建一个秒,表示之间的整秒数 两个指定的部分日期时间。 这两个部分必须包含相同的字段,例如您可以 指定两个LocalTime对象。
参数:
start - the start partial date, must not be null
end - the end partial date, must not be null
返回:
the period in seconds
答案 3 :(得分:3)
JodaTime正在使用机器时间。因此,要查找毫秒,您可以使用常量存储LocalDateTime(参考1970年1月1日)(因为UNIX Time)。
Unix时间或POSIX时间是用于描述时间点的系统, 定义为自午夜起来以来经过的秒数 1970年1月1日的协调世界时(UTC),不计算飞跃 秒。然后计算你的DateTime之间的差异。
我试过这样;
public static void main(String[] args) {
final LocalDateTime JAN_1_1970 = new LocalDateTime(1970, 1, 1, 0, 0);
DateTime local = new DateTime().withZone(DateTimeZone.forID("Europe/Amsterdam"));
DateTime utc = new DateTime(DateTimeZone.UTC);
System.out.println("Europe/Amsterdam milis :" + new Duration(JAN_1_1970.toDateTime(DateTimeZone.forID("Europe/Amsterdam")), local).getMillis());
System.out.println("UTC milis :" + new Duration(JAN_1_1970.toDateTime(DateTimeZone.UTC), utc).getMillis());
}
结果是;
Europe/Amsterdam milis :1429695646528
UTC milis :1429692046534
你的本地和utc代表相同的时间瞬间,(只有 附带不同的时区)。因此,getMillis()(给出了 从“瞬间”对应的“物理”时间间隔过去了 unix epoch),必须返回相同的值。
答案 4 :(得分:1)
Joda是一个完美的库,但是如果你需要两个日期之间的差异(毫秒),你应该计算getTime()之间的差异。如果你得到错误的结果,你会遇到时区左右的问题。通常它有效。