如何从停止时间中减去开始时间

时间:2014-10-27 10:29:21

标签: java datetime

我以字符串格式表示以下两个日期,并希望获得这些日期的时间。

Date elapsed = new Date(
               new SimpleDateFormat().parse("10/17/2014, 2:19:22 PM").getTime()
               - new SimpleDateFormat().parse("10/17/2014, 2:19:32 PM").getTime());
System.out.println("Elapsed Time: " + elapsed);

但是,我得到...ParseException: Unparseable date: "10/17/2014, 2:19:22 PM"有人知道为什么吗?

注意:这是我在解析块生成new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time)

中看到的日期

2 个答案:

答案 0 :(得分:2)

  • 您必须在SimpleDateFormat构造函数中指定格式。
  • 您的String具有格式 dd/MM/yyyy, hh:mm:ss a
  • 您的减法的逻辑不正确,因为它会为您提供日期之间的long值差异,并且您正在从该值创建日期无效< /em>。为此,您必须从那个长值中获得精确的差异。您必须将 diff (1000 * 60)分开以获得分钟,( 1000 * 60 * 60)获得秒数和(1000 * 60 * 60 * 24)获得日期。

    SimpleDateFormat sdf= new SimpleDateFormat("dd/MM/yyyy, hh:mm:ss a");
    long diff = sdf.parse("10/17/2014, 2:19:22 PM").getTime()
                            - sdf.parse("10/17/2014, 2:18:32 PM").getTime();
    System.out.println("Difference : " + (diff / (1000d * 60 )) +" Minutes");
    

注意: 1000d用于执行浮点运算。

答案 1 :(得分:1)

  

然而,我得到...... ParseException:Unparseable date:&#34; 10/17 / 2014,2:19:22 PM&#34;有谁知道为什么?

因为您还没告诉SimpleDateFormat字符串的格式是什么。使用accepts a pattern string之一构造函数,以便它知道会发生什么。