确定2个LocalDate对象之间的周数

时间:2017-03-09 15:59:09

标签: java time java-8 localdate

我确实试图搜索答案,但还没找到答案。

如果在网站上看不到日期,我想决定是否以及需要多少周转换。我试了几天

    LocalDate dateToSelect = parseStringDateToLocalDate(datum);
    LocalDate lastVisibleOrderDate = getLastVisibleOrderDate();
    int daysDifference = Period.between(lastVisibleOrderDate,dateToSelect).getDays();]
    int weeksToSwitch = (daysDifference / 7) + 1;

和期间:

    Long weeks = ChronoUnit.WEEKS.between(lastVisibleOrderDate,dateToSelect);

但是,我无法弄清楚如何计算7天的差异并仍然在同一周内。

方案: 最后可见日期= 2017-03-12(星期日) 选择日期= 2017-03-13(星期一)

差值= 1.除以7 = 0,加1,所以切换到下周。那样太好了!的工作原理。

但是,如果要选择的日期是2017-03-19(星期日),差异= 7.除以7加1 = 2.它会切换2周,但只需要切换1。

它应该可以来回切换几周,所以在dateToSelect上加一天到lastVisibleOrderDate或减去1天就会产生问题。

我可以这样做(为了积极的转换),但这不是我希望的最好的选择:

    if (0 < daysDifference && daysDifference <= 7){

    } else if (7 < daysDifference && daysDifference <=14){

    } else if (14 < daysDifference && daysDifference <=21){

    } else if (21 < daysDifference && daysDifference <=28){

    }

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您想使用ChronoUnit来衡量时间。

在你的问题中,if / else你实际上是在测量一周8天。如果你减去两天答案是0,那么最低的数字是0,而不是1.所以你的例子中7天真的是一周+ 1天。

我相信这会让你得到你想要的结果。

LocalDate lastVisible = LocalDate.of(2017, 3, 12);
LocalDate dateToSelect = LocalDate.of(2017, 3, 13).minusDays(1);

long weeks = ChronoUnit.WEEKS.between(lastVisible, dateToSelect);
System.out.println("number of weeks "+ weeks);

dateToSelect = LocalDate.of(2017, 3, 19).minusDays(1);
weeks = ChronoUnit.WEEKS.between(lastVisible, dateToSelect);
System.out.println("number of weeks "+ weeks);

dateToSelect = LocalDate.of(2017, 3, 20).minusDays(1);
weeks = ChronoUnit.WEEKS.between(lastVisible, dateToSelect);
System.out.println("number of weeks "+ weeks);

- 输出:

number of weeks 0
number of weeks 0
number of weeks 1

但这是为了获得实际的周数。

LocalDate lastVisible = LocalDate.of(2017, 3, 12);
LocalDate dateToSelect = LocalDate.of(2017, 3, 13);

long weeks = ChronoUnit.WEEKS.between(lastVisible, dateToSelect);
System.out.println("number of weeks "+ weeks);

dateToSelect = LocalDate.of(2017, 3, 19);
weeks = ChronoUnit.WEEKS.between(lastVisible, dateToSelect);
System.out.println("number of weeks "+ weeks);

// to get number of weeks regardless of going forward or backwards in time
dateToSelect = LocalDate.of(2017, 3, 20);
weeks = Math.abs(ChronoUnit.WEEKS.between(dateToSelect, lastVisible));
System.out.println("number of weeks "+ weeks);

- 输出:

number of weeks 0
number of weeks 1
number of weeks 1

答案 1 :(得分:0)

您可以使用double来避免这种情况:

double daysDifferenceDbl = daysDifference;
double weeksToSwitchDbl = (daysDifferenceDbl / 7) + 1;        
int weeksToSwitch = (int) weeksToSwitchDbl;