繁体   English   中英

Java + Joda Time两个日期之间的一周

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM