2

我遇到了一个简单的问题,我解决了(我没有放弃)。但是,我认为有一些更简洁和棘手的解决方案。问题如下:返回今天前最后X天的日期。例如,如果今天是 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();
    }

任何人都给我一个数学公式或更简单的解决方案,如果有的话?

4

2 回答 2

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
于 2013-07-09T22:39:16.580 回答
1

您的解决方案对我来说看起来不错。但是一个提示:你不应该Math.abs在这里使用,你应该知道你的哪个变量,today或者,在你的-statementday的每个分支中更大: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变量。

于 2013-07-09T22:39:30.173 回答