我遇到了一个简单的问题,我解决了(我没有放弃)。但是,我认为还有一些更整洁,更棘手的解决方案。 问题如下:返回今天前一天的最后一天的日期。例如,如果今天是2013年7月9日星期二,我希望上周五的答案是2013年7月5日星期五。
我的解决方案如下:
public Date dateOfLast(int day) {
int today = calendar.get(Calendar.DAY_OF_WEEK);
int daysDifferences = today - day;
int daysToSubtract;
if (day < today) {
//last day seems to be in current week !
//for example Fr > Tu.
daysToSubtract = -(Math.abs(daysDifferences));
} else {
//7- ( difference between days )!
//last day seems to be in the previous,thus we subtract the the days differences from 7
// and subtract the result from days of month.
daysToSubtract = -(7 - Math.abs(daysDifferences));
}
//subtract from days of month.
calendar.add(Calendar.DAY_OF_MONTH, daysToSubtract);
return calendar.getTime();
}
任何人都给我一个数学公式或更简单的解决方案,如果有的话?
答案 0 :(得分:2)
int daysToSubtract = ((today - day) + 7) % 7;
如果我没弄错的话,应该没问题。
例如
today = 4
day = 2
daysToSubtract = ((4 - 2) + 7) % 7 = 2 : correct
today = 2
day = 4
daysToSubtract = ((2 - 4) + 7) % 7 = 5 : correct
答案 1 :(得分:1)
您的解决方案对我来说很好。但是提示:您不应该在这里使用Math.abs
,您应该知道today
的每个分支中哪个变量day
或if
更大语句来:
if (day < today)
daysToSubtract = day - today; // 'today' is bigger
else
daysToSubtract = day - today - 7; // 'day' is bigger
或只是
int daysToSubtract = day - today - ((day < today) ? 0 : 7);
请注意,我们不再需要daysDifferences
变量了。