2016-04-25 56 views
1

因此,在我正在处理的Java项目中,我们只需要使用 Date和Calendar对象来表示日期。我正在写的一种方法要求日期至少在过去一定的年数,所以我需要能够准确地计算出现在与给定日期或日历之间的年数。我设法准确地计算出使用该实施之间的天数:计算两个Date或Calendar对象之间的年数,考虑闰年

public static long daysSince(Date pastDate) { 
    long millisecondsSince = new Date().getTime() - pastDate.getTime(); 
    return TimeUnit.DAYS.convert(millisecondsSince, TimeUnit.MILLISECONDS); 
} 

不过我现在在努力寻找一种方法来准确计算这些日期之间的年数,同时考虑到闰年等。显然将上述方法的结果除以365或365.25并不完全正常。我知道joda时间包和java.time,但我们明确需要使用Date和Calendar对象。任何人都知道如何做到这一点,最好尽快和优雅尽可能?谢谢

编辑:似乎发现功能的解决方案,请参阅下面

回答

2

我终于可以使用下面的代码来实现所需的功能(利用Haseeb豆的链接的一些想法):

public static int yearsSince(Date pastDate) { 
    Calendar present = Calendar.getInstance(); 
    Calendar past = Calendar.getInstance(); 
    past.setTime(pastDate); 

    int years = 0; 

    while (past.before(present)) { 
     past.add(Calendar.YEAR, 1); 
     if (past.before(present)) { 
      years++; 
     } 
    } return years; 
} 

初步测试似乎正在从这一正确的输出,但我还没有测试更广泛LY。

+0

+1我不知道它是否更简单,这取决于我们比较,因为我没有循环我的代码应该让我的代码运行得更快。但很高兴你实施了一个解决方案 – sebenalern

1

检查这个简单的例子就可以帮助你:

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class GetNumberOfYearsBetweenTwoDate { 

    public int getNumberOfYearsBetweenTwoDate(String strDate1, String dateFormat1, 
    String strDate2, String dateFormat2) { 
     int years = 0; 

     Date date1, date2 = null; 
     SimpleDateFormat sdf1 = new SimpleDateFormat(dateFormat1); 
     SimpleDateFormat sdf2 = new SimpleDateFormat(dateFormat2); 
     SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy"); 

     try { 
      date1 = (Date)sdf1.parse(strDate1); 
      date2 = (Date)sdf2.parse(strDate2); 

      int year1 = Integer.parseInt(sdfYear.format(date1)); 
      int year2 = Integer.parseInt(sdfYear.format(date2)); 

      years = year2 - year1; 
     } catch (ParseException ex) { 
      System.err.println(ex.getMessage()); 
     } 

     return years; 
    } 

    public static void main(String[] args) { 
     String strDate1 = "13-10-1988"; 
     String dateFormat1 = "dd-MM-yyyy"; 

     String strDate2 = "2011-10-13"; 
     String dateFormat2= "yyyy-MM-dd"; 

     GetNumberOfYearsBetweenTwoDate gnoybtd = new 
     GetNumberOfYearsBetweenTwoDate(); 
     int years = gnoybtd.getNumberOfYearsBetweenTwoDate(strDate1, dateFormat1, 
     strDate2, dateFormat2); 

     System.out.println("Number of Years: "+years+" Years"); 
    } 

} 
+0

谢谢,但这不是简单地从当前日期的年份值中减去过去日期的年份值吗?即我可以有两个日期:现在(2016-25-4)和过去的日期,比如说2015-31-12。按照你的方法,这将计算为2016-2015 = 1年过去了,但实际上短短5个月过去了。对于我的项目来说,至关重要的是我可以计算已经过去的年数,考虑到闰年。虽然感谢 – transiti0nary

+0

看看这个问题的答案,你可能会得到任何有价值的帮助:) http://stackoverflow.com/questions/2846135/how-do-i-calculate-the-number-of-years-difference -between-2-dates –

+0

谢谢。我能够使用您链接的一些代码实施解决方案。我将添加它作为答案。 – transiti0nary