【问题标题】:How can I calculate the difference between two dates [duplicate]如何计算两个日期之间的差异[重复]
【发布时间】:2011-03-04 21:33:01
【问题描述】:

可能重复:
How do I calculate someone's age in Java?

我有两个日期,例如 19/03/1950 和 18/04/2011。我如何计算它们之间的差异以获得人的年龄?我是否必须继续乘以得到小时或秒等?

【问题讨论】:

  • 以 Kodejava.org 为例的问题是,如果您将公历倒退几天并越过一个 DST 边界(特别是如果您越过“Spring Forward”),那么您就是天向后计算出现了一天短。

标签: java


【解决方案1】:
String date1 = "26/02/2011";
String date2 = "27/02/2011";
String format = "dd/MM/yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date dateObj1 = sdf.parse(date1);
Date dateObj2 = sdf.parse(date2);
long diff = dateObj2.getTime() - dateObj1.getTime();

int diffDays =  (int) (diff / (24* 1000 * 60 * 60));

【讨论】:

  • 这看起来不错,但如果统计日期在冬季时间和结束日期在夏季时间,它将不起作用,因为您将错过一小时,并且当您使用 INT 时,结果会四舍五入下。您需要使用 int diffDays = Math.round((float)diff / (24* 1000 * 60 * 60));
【解决方案2】:

您使用 Date 和 Duration 类:

http://download.oracle.com/javase/1.5.0/docs/api/java/util/Date.html

http://download.oracle.com/javase/1.5.0/docs/api/javax/xml/datatype/Duration.html

您创建日期对象,然后使用 Duration 的方法 addTo() 和减法()

【讨论】:

  • Duration 仅在 XML 上下文中可用,正如包名所暗示的那样。
  • 实际上在 Java 8 (java.time.Duration) 中有一个新的 Duration 类。不幸的是,我不能使用它,因为我仍然有使用 Java 6 的客户。=/
【解决方案3】:

以下代码将为您提供两个日期之间的差异:

import java.util.Date;
import java.util.GregorianCalendar;

public class DateDiff {
  public static void main(String[] av) {
    /** The date at the end of the last century */
    Date d1 = new GregorianCalendar(2000, 11, 31, 23, 59).getTime();

    /** Today's date */
    Date today = new Date();

    // Get msec from each, and subtract.
    long diff = today.getTime() - d1.getTime();

    System.out.println("The 21st century (up to " + today + ") is "
        + (diff / (1000 * 60 * 60 * 24)) + " days old.");
  }
}

【讨论】:

    【解决方案4】:

    为什么不使用jodatime?在java中计算日期和时间要容易得多。

    可以获取年份,使用方法yearsBetween()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      相关资源
      最近更新 更多