如何计算两个日期之间的差异?

4

可能是重复问题:
如何在Java中计算某人的年龄?

我有两个日期,例如19/03/1950和18/04/2011。如何计算它们之间的差异以获取人的年龄?我需要一直乘以小时或秒等吗?


请查看此处:http://www.kodejava.org/examples/90.html - Harry Joy
Kodejava.org 上的示例存在问题,如果您将公历向后倒退一些天数并跨越一个夏令时边界(特别是如果您跨越了“春季前进”),则您的向后计算天数会少一天。 - Stephen M -on strike-
4个回答

5
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)); - Pavel Jiri Strnad

1
以下代码将给出两个日期之间的差异:
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.");
  }
}

1

1
持续时间仅在XML上下文中可用,正如包名所示。 - Sean Patrick Floyd
1
实际上,在Java 8中有一个新的Duration类(java.time.Duration)。不幸的是,我不能使用它,因为我仍然有使用Java 6的客户。 =/ - Stephen M -on strike-

1

为什么不使用jodatime?在Java中计算日期和时间更加容易。

您可以获取年份并使用yearsBetween()方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接