确定 2 个 LocalDate 对象之间的周数
Determine weeks between 2 LocalDate objects
我确实尝试搜索答案,但没有找到。
如果日期在网站上不可见,我想决定是否切换以及切换多少周。我试了几天
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(星期日)
截止日期 select = 2017-03-13(星期一)
差异 = 1。除以 7 = 0,加 1,所以切换到下周。太棒了!有效。
但是,如果 select 的日期是 2017-03-19(星期日),差值 = 7。除以 7 加 1 = 2。它会切换 2 周,但只需要切换1.
它应该能够来回切换星期,所以将一天加到 lastVisibleOrderDate 上或在 dateToSelect 上减去 1 天会带来问题。
我可以这样做(为了积极的转变),但这不是我希望的最好的选择:
if (0 < daysDifference && daysDifference <= 7){
} else if (7 < daysDifference && daysDifference <=14){
} else if (14 < daysDifference && daysDifference <=21){
} else if (21 < daysDifference && daysDifference <=28){
}
有什么建议吗?
您可以使用 double 来避免这种情况:
double daysDifferenceDbl = daysDifference;
double weeksToSwitchDbl = (daysDifferenceDbl / 7) + 1;
int weeksToSwitch = (int) weeksToSwitchDbl;
您想使用 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
我确实尝试搜索答案,但没有找到。
如果日期在网站上不可见,我想决定是否切换以及切换多少周。我试了几天
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(星期日) 截止日期 select = 2017-03-13(星期一)
差异 = 1。除以 7 = 0,加 1,所以切换到下周。太棒了!有效。
但是,如果 select 的日期是 2017-03-19(星期日),差值 = 7。除以 7 加 1 = 2。它会切换 2 周,但只需要切换1.
它应该能够来回切换星期,所以将一天加到 lastVisibleOrderDate 上或在 dateToSelect 上减去 1 天会带来问题。
我可以这样做(为了积极的转变),但这不是我希望的最好的选择:
if (0 < daysDifference && daysDifference <= 7){
} else if (7 < daysDifference && daysDifference <=14){
} else if (14 < daysDifference && daysDifference <=21){
} else if (21 < daysDifference && daysDifference <=28){
}
有什么建议吗?
您可以使用 double 来避免这种情况:
double daysDifferenceDbl = daysDifference;
double weeksToSwitchDbl = (daysDifferenceDbl / 7) + 1;
int weeksToSwitch = (int) weeksToSwitchDbl;
您想使用 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