[英]Week between two dates Java + Joda Time
我希望在Java中获得两个日期范围之间的周数和月数。 例如,开始日期:03/01/2012结束日期:03/05/2012
由于这两个日期分为两个不同的星期,我希望结果为2而不是0。
问题的第二部分是:开始日期:02/29/2012结束日期:03/01/2012
介于两者之间的月数应为2。
我一直在网上搜索这个,很多人都推荐在Java中使用Joda Date时间。 所以我试了一下。 我能够让这几周工作,但我不确定这是否正确。 这是我为了获得一周的持续时间而做的事情:
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更新了结束时间
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();
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
它会给你的东西吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.