Java 得到最后一句话;X";从今天开始?

Java 得到最后一句话;X";从今天开始?,java,math,Java,Math,我遇到了一个简单的问题,我解决了(我没有放弃)。然而,我认为还有一些更巧妙的解决方案。 问题如下:返回今天之前最后一个X天的日期。例如,如果今天是2013年7月9日星期二,我想要最后一个星期五,那么答案是2013年7月5日星期五 我的解决办法如下: public Date dateOfLast(int day) { int today = calendar.get(Calendar.DAY_OF_WEEK); int daysDifferences =

我遇到了一个简单的问题,我解决了(我没有放弃)。然而,我认为还有一些更巧妙的解决方案。 问题如下:返回今天之前最后一个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();
    }
公开日期最后一天(整数天){
int today=calendar.get(calendar.DAY,OF,OF,OF,OF,WEEK);
int daysDifferences=今天-天;
int daysToSubtract;
如果(天<今天){
//最后一天似乎就在本周!
//例如Fr>Tu。
daysToSubtract=-(Math.abs(daysDifferences));
}否则{
//7-(日与日之间的差异)!
//最后一天似乎在前一天,因此我们从7中减去天数差
//然后从月份的天数中减去结果。
daysToSubtract=-(7-Math.abs(daysDifferences));
}
//从每月的天数中减去。
calendar.add(calendar.DAY\u/u月,daysToSubtract);
返回calendar.getTime();
}
有人给我一个数学公式或更简单的解决方案吗

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

我觉得你的解决方案不错。但是有一个提示:你不需要使用
Math.abs
,在这里,你应该知道哪些变量,
今天
,在
if
语句的每个分支中都更大:

if (day < today)
    daysToSubtract = day - today;  // 'today' is bigger
else
    daysToSubtract = day - today - 7;  // 'day' is bigger
if(天<今天)
daysToSubtract=天-今天;/'今天的更大
其他的
daysToSubtract=天-今天-7;/'“白天”更大
或者只是

int daysToSubtract = day - today - ((day < today) ? 0 : 7);
int daysToSubtract=day-today-((day

请注意,我们不再需要
daysDifferences
变量。

您的解决方案对我来说很好。谢谢您,但我认为还有更好的解决方案。您能解释一下该部分吗?%这是模运算符。它计算整数除法的余数:0%7=0;1 % 7 = 1; ...; 7 % 7 = 0; 8 % 7 = 1; ...是的,你是90%正确,除了我需要减去天数,因此int daysToSubtract=-((今天)+7)%7);你可能是指+7。否则,要减去的天数将为负数,因此您将添加天数。@JBNizet我认为变量的名称有误导性;看起来我们希望它是负的。