检查Date对象和Calendar对象是否在同一个月的最有效方法

时间:2012-11-07 22:56:01

标签: java performance date comparison deprecated

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

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

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()和{ {1}}

Date.getYear()

我非常接近使用这种方法,因为它似乎是最快的,但有更快的方式吗?这是一种愚蠢的方式,因为public static boolean sameMonth(Calendar month, Date date) { return month.get(Calendar.YEAR) == date.getYear() && month.get(Calendar.MONTH) == date.getMonth(); } 方法已被弃用?注意:此项目将始终使用Java 7

运行

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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));
    }