3

我正在做一个项目,该项目将在日期之间进行数千次比较,看看它们是否在同一个月,我想知道最有效的方法是什么。

这不完全是我的代码的样子,但要点如下:

List<Date> dates = getABunchOfDates();
Calendar month = Calendar.getInstance();
for(int i = 0; i < numMonths; i++) 
{
    for(Date date : dates)
    {
        if(sameMonth(month, date)
            .. doSomething
    }
    month.add(Calendar.MONTH, -1);
}

当这种比较会发生数千次时,为每个日期创建一个新Calendar对象似乎是一个相当大的开销,所以我有点想作弊并使用不推荐使用的方法Date.getMonth()Date.getYear()

public static boolean sameMonth(Calendar month, Date date)
{
    return month.get(Calendar.YEAR) == date.getYear() && month.get(Calendar.MONTH) == date.getMonth();
}

我非常接近使用这种方法,因为它似乎是最快的,但是有更快的方法吗?是一种愚蠢的方式吗,因为这些Date方法已被弃用?注意:此项目将始终使用 Java 7 运行

4

2 回答 2

2

我无法评论是否使用已弃用的方法,但如果您选择不使用,则无需Calendar为每次Date检查都实例化一个新方法。只需使用另一个CalendarsetTime(date)在检查之前调用(Calendar如果并行化,则为每个线程调用一个)。

作为旁注,我必须同意 ChristopheD 的评论,即这是值得数据库的东西。

于 2012-11-07T23:01:16.690 回答
0

我认为您可以定义一个静态DateFormat来从中提取月份和年份,Date并将这两个对象仅用作日期。

    public static DateFormat formatter= new SimpleDateForm("MMyyyy");
    public static boolean sameMonth(Date date1, Date date2)
    {
      return formatter.format(date1).equals(formatter.format(date2));
    }
于 2012-11-07T23:02:20.183 回答