如何在Java中获得两个日期之间的确切差异以及时间?

时间:2013-12-26 14:22:57

标签: java date datetime

我有两个日期对象。当我在日期对象上使用after方法时。它没有给出正确的结果。这是我的代码

DateandTime1=Thu Dec 26 08:05:42 IST 2013     
DateandTime2=Thu Dec 26 07:15:40 IST 2013

DateandTime1DateandTime2是两个Date个对象。如果我编写boolean result=DateandTime1.after(DateandTime2)之类的代码,那么result值应为'false'。但它给了我'真实'。我可以知道是什么原因,如果有任何办法可以得到确切的区别,请告诉我。

3 个答案:

答案 0 :(得分:2)

正如评论所说,您的第一个Date是在您的第二个Date之后,这就是致电DateandTime1.after(DateandTime2)返回true的原因。

至于你的第二个问题,你可以通过

获得两个日期之间的确切差异
long difference = date1.getTime() - date2.getTime();

这将返回以毫秒为单位的差异。如果要将其转换为其他时间测量,可以使用TimeUnit枚举。例如:

long differenceInHours = TimeUnit.MILLISECONDS.toHours(difference);

答案 1 :(得分:1)

<强> Class : java.​util.​Date

public boolean after(Date when)

测试此日期是否在指定日期之后。
返回:
true当且仅当此Date对象表示的时刻严格晚于when表示的时刻;否则false

7之后的8为是。

答案 2 :(得分:1)

为了好玩,我在Joda-Time 2.3中尝试了这个。果然,8点来自7点。

至于“确切的差异”,你想以什么形式出现?秒?毫秒?小时,分钟和秒?在下面的代码示例中,我使用Joda-Time中的Period类以“PnYnMnDTnHnMnS”的格式呈现标准ISO 8601 "duration"

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

//        DateandTime1=Thu Dec 26 08:05:42 IST 2013
//        DateandTime2=Thu Dec 26 07:15:40 IST 2013

// Specify a time zone rather than depend on default.
// By "IST" did you mean India Standard Time or Irish Standard Time?
DateTimeZone timeZone = DateTimeZone.forID( "Asia/Kolkata" );

DateTime dateTime1 = new DateTime( 2013, 12, 26, 8, 5, 42, timeZone );
DateTime dateTime2 = new DateTime( 2013, 12, 26, 7, 15, 40, timeZone );

Period period = new Period( dateTime2, dateTime1 );

Boolean is8After7 = ( dateTime1.isAfter( dateTime2 ) );

转储到控制台...

System.out.println( "dateTime1: " + dateTime1 );
System.out.println( "dateTime2: " + dateTime2 );
System.out.println( "is8After7: " + is8After7 );
System.out.println( "period: " + period );

跑步时......

dateTime1: 2013-12-26T08:05:42.000+05:30
dateTime2: 2013-12-26T07:15:40.000+05:30
is8After7: true
period: PT50M2S