有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中,如何获得两个日期和时间之间的精确差异?

我有两个约会对象。当我对日期对象使用after方法时。它没有给出正确的reulst。这是我的密码

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) 个答案

  1. # 1 楼答案

    为了好玩,我在Joda-Time2.3中尝试了这个。果然,7之后是8

    至于“完全不同”,你想要什么样的形式?几秒钟?毫秒?小时、分钟和秒?在下面的代码示例中,我使用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
    
  2. # 2 楼答案

    Class : java.​util.​Date

    public boolean after(Date when)
    

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

    所以7点后8点是肯定的

  3. # 3 楼答案

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

    至于你的第二个问题,你可以通过这样做得到两次约会的确切区别

    long difference = date1.getTime() - date2.getTime();
    

    这将以毫秒为单位返回差值。如果要将其转换为另一个时间度量,可以使用TimeUnit枚举。例如:

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