Java 如何获得特定年份中的所有周日日期?

Java 如何获得特定年份中的所有周日日期?,java,Java,精确副本: int year=2009; cal日历=新的公历日历(年,日历1月1日); 对于(int i=0,inc=1;i

精确副本:


int year=2009;
cal日历=新的公历日历(年,日历1月1日);
对于(int i=0,inc=1;i<366&&cal.get(日历年)=年;i+=inc){
if(cal.get(Calendar.DAY\u OF_WEEK)=Calendar.SUNDAY){
//今天是星期天
cal.add(日历日,每月7日);
inc=7;
}否则{
cal.add(日历日/月,1);
}
}
在中,我得到了从第一个月的第二个星期日到明年第一个星期日的所有星期日的日期。事实上,我只是在寻找一个特定的年份,而且它都是星期天的日期,请你再看一遍好吗


例如,我只需要从2009年1月到2009年12月的2009年所有周日的日期

以下是我可以开始使用的算法(代码留给读者作为练习):

查找与特定日期最近的星期日。例如,从1月1日开始向前走,直到找到一个星期天。这应不超过7次操作

现在你知道了一个星期天,你可以根据这个星期天简单地把7的倍数加到第一个星期天,计算出所有其他的儒略日期

你还应该计算从12月31日起最接近的星期日,这样你就知道什么时候停止在你选择的年份中包括星期日


哦,刚刚写完,我明白了。

以下是我可以开始使用的算法(代码留给读者作为练习):

查找与特定日期最近的星期日。例如,从1月1日开始向前走,直到找到一个星期天。这应不超过7次操作

现在你知道了一个星期天,你可以根据这个星期天简单地把7的倍数加到第一个星期天,计算出所有其他的儒略日期

你还应该计算从12月31日起最接近的星期日,这样你就知道什么时候停止在你选择的年份中包括星期日


哦,刚刚写完,我明白了。

编程新手?好吧,让我们一起来看看代码

我看到的第一件事是循环中的条件:

if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
if (condition_that_checks_if_it_is_a_sunday) {
    // this is a sunday
    cal.add(Calendar.DAY_OF_MONTH, 7); 
    inc = 7;
} else {
    cal.add(Calendar.DAY_OF_MONTH, 1);
}
这将检查存储在日历
cal
中的当前日期是否有
DAY\u OF_WEEK
SUNDAY
。如果是,它做一件事,如果不是,它做另一件事

现在我们知道了循环的“大脑”在寻找什么,让我们看看循环的声明:

for (int i = 0, inc = 1; i < 366 && cal.get(Calendar.YEAR) == year; i+=inc)
我相信大家都知道,这会产生两个变量:
I
inc
。它将
i
设置为0,将
inc
设置为1

在运行循环的每个迭代之前检查循环的条件。它是:

i < 366 && cal.get(Calendar.YEAR) == year
它将
inc
的值与
i
的值相加,并将其存储在
i

那么,到目前为止,我们在这个循环中有什么

  • 循环以
    i
    为0和
    inc
    为1开始
  • 循环会一直持续,只要
    • i
      小于公历年的长度(闰年为366)
    • (和)
      cal
      中的日期仍然与
      year
      中的年份相同
  • i
    inc
  • 让我们再看看循环的主体:

    if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
    
    if (condition_that_checks_if_it_is_a_sunday) {
        // this is a sunday
        cal.add(Calendar.DAY_OF_MONTH, 7); 
        inc = 7;
    } else {
        cal.add(Calendar.DAY_OF_MONTH, 1);
    }
    
    如您所见,如果是星期天,则会发生两件事:
    inc
    设置为7,而7
    DAY\u/u/u月
    add
    ed到
    cal
    。这意味着在循环的下一次迭代中,
    i+=inc
    表达式将表示
    i+=7
    ,而不是
    i+=1
    ,这是在
    inc
    为1时执行的(就像初始化完成时一样)

    如果不是星期天,则在
    cal
    中添加一周中的一天

    那么我们在循环体中有什么呢

    • 检查
      cal
      是否为周日
      • 如果是,则提前7天进行校准。不仅如此,还要以7的速度继续前进
      • 如果
        cal
        不是星期天,则将其提前到一周的第二天,并让
        i
        继续提前1
    换句话说,循环将从
    cal
    的初始值开始,然后一次向前移动
    cal
    一天,直到找到一个星期日。一旦这样做,它将一次向前移动7天,直到超过366天,或者直到下一年
    cal

    因此,通过(嗯哼)简单地检查上面的代码,我们可以得出结论,它实际上并没有在一年内“得到”星期天。它只是对它们进行迭代,由您添加代码来实际处理它找到的星期天

    现在我们已经一起检查了代码,我敢肯定这样做很简单!这真的只是增加几行而已。每次循环进入它“知道”
    cal
    是星期天的部分时,您只需添加一行即可[插入您想要的内容]


    简单,不是吗?

    编程新手?好吧,让我们一起来看看代码

    我看到的第一件事是循环中的条件:

    if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
    
    if (condition_that_checks_if_it_is_a_sunday) {
        // this is a sunday
        cal.add(Calendar.DAY_OF_MONTH, 7); 
        inc = 7;
    } else {
        cal.add(Calendar.DAY_OF_MONTH, 1);
    }
    
    这将检查存储在日历
    cal
    中的当前日期是否有
    DAY\u OF_WEEK
    SUNDAY
    。如果是,它做一件事,如果不是,它做另一件事

    现在我们知道了循环的“大脑”在寻找什么,让我们看看循环的声明:

    for (int i = 0, inc = 1; i < 366 && cal.get(Calendar.YEAR) == year; i+=inc)
    
    我相信大家都知道,这会产生两个变量:
    I
    inc
    。它将
    i
    设置为0,将
    inc
    设置为1

    在运行循环的每个迭代之前检查循环的条件。它是:

    i < 366 && cal.get(Calendar.YEAR) == year
    
    它将
    inc
    的值与
    i
    的值相加,并将其存储在
    i

    那么,到目前为止,我们在这个循环中有什么

  • 循环以
    i
    为0和
    inc
    为1开始