我希望获得Java中两个日期范围之间的周数和月数。例如, 开课日期:03/01/2012 截止日期:03/05/2012
由于这两个日期分为两个不同的星期,我希望结果为2而不是0.
问题的第二部分是: 开课日期:02/29/2012 截止日期:03/01/2012
介于两者之间的月数应为2.
我一直在网上搜索这个,很多人都推荐在Java中使用Joda Date time。所以我试了一下。我能够让这几周工作,但我不确定这是否正确。以下是我为了获得一周的持续时间而做的事情:
DateTime s = new DateTime(Long.parseLong("1330573027000")); // 2012-02-29
DateTime e = new DateTime(Long.parseLong("1331005027000")); // 2012-03-05
Weeks weeks = Weeks.weeksBetween(s, e).plus(1);
当我期待2时,返回1,因为两个日期在不同的星期。
几个月的持续时间我试着遵循相同但它返回0但我希望它返回2,因为这两个日期是在两个不同的月份。
有人可以指点我正确的方向吗?
谢谢!
修改 我想我有一种方法可以做到,请告诉我它是否正确:
DateTime start = new DateTime(Long.parseLong("1330659427000"));
DateTime start = new DateTime(Long.parseLong("1331005027000"));
DateTime finalStart = start.dayOfWeek().withMinimumValue();
DateTime finalEnd = end.dayOfWeek().withMaximumValue();
然后获得finalStart和finalEnd之间的区别。这看起来是否正确?
EDIT2 更新了结束时间
答案 0 :(得分:6)
JodaTime Weeks.weeksBetween(s,e)仅返回整周计数。不完整的周数不计算在内。要解决此问题,您必须保证日期在开始时和结束时。 试试这个:
int weeks = Weeks.weeksBetween(s.dayOfWeek().withMinimumValue().minusDays(1),
e.dayOfWeek().withMaximumValue().plusDays(1)).getWeeks();
minusDays / plusDays将保证我试图计算的周数已满。
相同的逻辑适用于月份:
int months = Months.monthsBetween(s.dayOfMonth().withMinimumValue().minusDays(1),
e.dayOfMonth().withMaximumValue().plusDays(1)).getMonths();
答案 1 :(得分:0)
int OFFSET_ONE = 1;
DateTime t1 = new DateTime().withDate(2012, 02, 29).withDayOfWeek(1);
DateTime t2 = new DateTime().withDate(2012, 03, 05).withDayOfWeek(7);
int week1 = t2.weekOfWeekyear().get();
int week2 = t1.weekOfWeekyear().get();
System.out.println(week1-week2+OFFSET_ONE); // add OFFSET_ONE
它能给你所追求的目标吗?