我想回溯约达时间的1年,但我不想从2010年2月15日到2009年2月15日,但是,例如,如果2010年2月15日是星期一,那么我想到达最近的星期一2009年。
目前,我正在使用此:
int dayNumber = Integer.parseInt(iDate.dayOfWeek().getAsString());
if(dayNumber == 1) { // start of week
println(iDate.plusYears(-1).plusDays(1).dayOfWeek().getAsString());
}
暂时可以正常运行,但是可能有更安全的方法,例如,可以轻松返回5年。
最佳答案
我将使用Joda Time方法追溯到1年,然后有一个switch
语句将其移至适当的日期。从您的问题中无法得知您是否想去星期一。如@Klas指出的那样,自己进行计算将错过重要的事情,例如leap年。
iDate = iDate.minusYears(1);
switch (iDate.getDayOfWeek()) {
case 1:
// monday so no change
break;
case 2:
iDate = iDate.minusDays(1);
break;
case 3:
iDate = iDate.minusDays(2);
break;
...
}
如果您想花哨的话,可以构建一个小网格来加快速度。
// days in joda time are 1 based so 0 won't be used here
private static final int[] daysShift = new int[] = {0, 0, -1, -2, -3, 3, 2, 1};
...
iDate = iDate.minusYears(1);
// based on the current day, shift us by a certain number of days, + or -
iDate.plusDays(daysShift[iDate.getDayOfWeek()]);