【问题标题】:Java-How to calculate accurate time difference while using Joda Time JarJava-如何在使用 Joda Time Jar 时计算准确的时差
【发布时间】:2013-07-04 05:05:42
【问题描述】:

我在使用从 http://sourceforge.net/projects/joda-time/files/joda-time/2.2/ 下载的 Joda 时间 jar 时遇到问题。当我使用以下sn-p时,我可以得到结果

static void timeDifferencewithJoda()  {

    String dateStart = "01/14/2012 09:29:58";
    String dateStop = "01/15/2012 10:31:48";

    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

    Date d1 = null;
    Date d2 = null;

    try {
        d1 = format.parse(dateStart);
        d2 = format.parse(dateStop);

        DateTime dt1 = new DateTime(d1);
        DateTime dt2 = new DateTime(d2);

        System.out.print(Days.daysBetween(dt1, dt2).getDays() + " days, ");
        System.out.print(Hours.hoursBetween(dt1, dt2).getHours() % 24 + " hours, ");
        System.out.print(Minutes.minutesBetween(dt1, dt2).getMinutes() % 60 + " minutes, ");
        System.out.print(Seconds.secondsBetween(dt1, dt2).getSeconds() % 60 + " seconds.");

     } catch (Exception e) {
        e.printStackTrace();
     }

}

结果是

1 days, 1 hours, 1 minutes, 50 seconds.

但我面临这个时差的冲突。

01/14/2012 09:29:58

01/15/2012 10:31:48

这里已经声明了两个时间,但是没有像 AM 或 PM 这样的时间段的指示。即,时间可能是早上或晚上。如何获得准确的时差?

任何有关这方面的帮助都会很有用。

【问题讨论】:

    标签: java datetime jodatime


    【解决方案1】:

    使用Joda formatter(非上午/下午)

      final String dateStart = "01/14/2012 09:29:58";
      final String dateStop = "01/15/2012 10:31:48";
      final DateTimeFormatter format = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");
      final DateTime dt1 = format.parseDateTime(dateStart);
      final DateTime dt2 = format.parseDateTime(dateStop);
    
      System.out.print(Days.daysBetween(dt1, dt2).getDays() + " days, ");
      System.out.print(Hours.hoursBetween(dt1, dt2).getHours() % 24 + " hours, ");
      System.out.print(Minutes.minutesBetween(dt1, dt2).getMinutes() % 60 + " minutes, ");
      System.out.print(Seconds.secondsBetween(dt1, dt2).getSeconds() % 60 + " seconds.");    
    

    使用Joda formatter(上午/下午)

      final String dateStart = "01/14/2012 09:29:58 AM";
      final String dateStop = "01/15/2012 10:31:48 PM";
      final DateTimeFormatter format = DateTimeFormat.forPattern("MM/dd/yyyy hh:mm:ss a");
      final DateTime dt1 = format.parseDateTime(dateStart);
      final DateTime dt2 = format.parseDateTime(dateStop);
    
      System.out.print(Days.daysBetween(dt1, dt2).getDays() + " days, ");
      System.out.print(Hours.hoursBetween(dt1, dt2).getHours() % 24 + " hours, ");
      System.out.print(Minutes.minutesBetween(dt1, dt2).getMinutes() % 60 + " minutes, ");
      System.out.print(Seconds.secondsBetween(dt1, dt2).getSeconds() % 60 + " seconds.");  
    

    计算与Period之间的单位

      final Period period = new Period(dt1, dt2);
      System.out.print(period.getDays() + " days, ");
      System.out.print(period.getHours() + " hours, ");
      System.out.print(period.getMinutes() + " minutes, ");
      System.out.print(period.getSeconds() + " seconds.");
    

    【讨论】:

      【解决方案2】:

      在您的 SimpleDateFormat 中,您可以使用 HH 来指定小时数,并且如文档中所述,HH 代表 - 一天中的小时数 (0-23)。所以 AM/PM 在这里不适用。如果你想要 AM/PM 小时,你应该使用 KK 或 hh 来代替。您可以查看文档here

      【讨论】:

      • 我陷入了巨大的混乱。你能给我一个样本吗?
      • 您可以指定格式为SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a"); 然后您可以输入日期如:String dateStart = "01/14/2012 09:29:58 AM"; String dateStop = "01/15/2012 10:31:48 PM";
      • 抱歉:(我确实尝试过这个。我无法得到解决方案。Ilya 提供的解决方案目前正在为我工​​作......无论如何,谢谢你试图帮助我 :)跨度>
      猜你喜欢
      • 2011-10-14
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多