2010-02-12 37 views
3

什么是计算java中两个日历日期之间的时间量的最佳方法。我正在编写一种方法,用于确定在两个日期之间传递的月数,并根据预定义的月数返回布尔值。这是我的代码(无法正常工作)。如何确定Java中两个日历对象之间的时间?

此代码始终返回false。此代码也不考虑已过去的天数。如果开始日期是一个月末,这可能是一个问题。有没有简单的compareTo方法?

private boolean hasMatured() 
{ 
    Calendar now = Calendar.getInstance(); 

    Calendar start = (Calendar) super.dateOpened.clone(); 

    int nowYear = now.get(Calendar.YEAR); 
    int nowMonth = now.get(Calendar.MONTH); 

    int startYear = start.get(Calendar.YEAR); 
    int startMonth = start.get(Calendar.MONTH); 

    int monthsElapsed = (nowYear - startYear) * 12 + (nowMonth - startMonth); 

    return monthsElapsed>PERIOD_IN_MONTHS; 
} 
+0

在未来的问题中,请发布以及**什么**没有正确工作。这段代码发生了什么?应该发生什么呢?张贴在SSCCE(http://sscce.org)的味道都会非常有帮助。 – BalusC 2010-02-12 19:04:05

+0

我看到你编辑了这个问题。这里的实际日期是什么?将'now.getTime()','start.getTime()'和'monthsElapsed'的'System.out.println()'添加到方法的结尾。 – BalusC 2010-02-12 20:18:48

+0

@ZeroDivide:在你的评论中你说这是针对“CS任务”的。因此,请将问题标记为家庭作业。 – GreenMatt 2010-02-12 20:55:44

回答

2
int nowYear = now.get(Calendar.YEAR); 
int nowMonth = now.get(Calendar.MONTH); 

int startYear = now.get(Calendar.YEAR); 
int startMonth = now.get(Calendar.MONTH); 

int monthsElapsed = (nowYear - startYear) * 12 + (nowMonth - startMonth); 
0

的代码看起来不错,从一个主要的警告期待:Calendar可变

所以,与其

Calendar start = super.dateOpened; 

你应该做

Calendar start = (Calendar) super.dateOpened.clone(); 

否则将更改体现在dataOpened这可能会导致意想不到的副作用。

+0

我对mutable这个词不熟悉。但是,我明白为什么克隆这个对象很重要。我只是将引用传递给起始对象,这就是为什么这些变化会被反映出来。感谢您的帮助。 – ZeroDivide 2010-02-13 00:40:45

1

我会强烈推荐Joda Time所有日期相关的东西在Java中。它有一个更清洁,更直观的API,收集日期间隔的概念等。

+0

谢谢!我会检查这一点。但是,这段代码是用于CS分配的,我相信我们应该使用java API。 – ZeroDivide 2010-02-12 19:23:13

+0

够公平的。也许你会因为提到java.util.Calendar不是很理想而得到额外的评价:-) – 2010-02-12 19:24:08

+0

有趣的是,“正确”的CS答案是忽略构建良好并经过测试的免费库,而是成为一名通宵专家日期数学。哦,讽刺。 – 2010-02-12 19:48:26

0

我错过了什么吗?有一个的compareTo()的日历,以及其他有用的东西......

如何:

Calendar now = Calendar.getInstance();

now.add(Calendar.MONTH, -PERIOD_IN_MONTHS);

return super.dateOpened.before(now);

从今天减去X个月,并查看开始日期是否仍然在该日期之前。如果是,那么X个月一定已经过去了。

+1

OP之前做过,但之后改变它以反映给定的答案。检查编辑历史记录(点击问题编辑后的链接)。 – BalusC 2010-02-12 23:36:27

相关问题