计算年数的功能

时间:2013-01-20 20:58:31

标签: java

我有2个日期作为输入。我希望他们之间可以相隔数年。当不到1年时,我希望得到一个双倍(即0.xyz)作为输出。我尝试过以下功能:

private double getYearCount(Date startDate, Date endDate)
{
        long millisecondCount = endDate.getTime() - startDate.getTime();
        long yearMillisecondCount = 1000L * 60L * 60L * 24L * 365L;
        return millisecondCount / (double) yearMillisecondCount;
}

但我假设那一年是365天。所以闰年没有引起注意。 这2个日期可能有不同的年份(例如,它们可能是01.01.198707.01.2013)。

我怎样才能解决这个问题,我也注意到了闰年?

2 个答案:

答案 0 :(得分:0)

只需使用一年的正确时间。这是365.2425天。

但是,不建议这样做。使用时间/日期库确定两年的年份,然后减去它们。

为两个日期初始化一个GregorianCalendar,并获得年份。

答案 1 :(得分:0)

我写了一个方法,它返回日期范围内的年数和天数。正如他在评论中提到的James K. Polk,您可以将天数除以365,365.2425或366来获得一年的小数部分。

以下是测试结果。

header = None

这是代码。基本上,我从开始日期到结束日期逐个计算年数和日期。

此代码适用于Java 6,Java 7及更高版本。

From 01 Jan 1987 to 01 Jul 2013 is an interval of 26 years and 182 days.
From 01 Jul 2012 to 01 Jul 2013 is an interval of 1 years and 1 days.
From 01 Jul 2012 to 31 Jul 2012 is an interval of 0 years and 31 days.
From 01 Apr 2012 to 31 Dec 2012 is an interval of 0 years and 275 days.