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开始
小于公历年的长度(闰年为366)i
- (和)
中的日期仍然与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,而7DAY\u/u/u月
是add
ed到cal
。这意味着在循环的下一次迭代中,i+=inc
表达式将表示i+=7
,而不是i+=1
,这是在inc
为1时执行的(就像初始化完成时一样)
如果不是星期天,则在cal
中添加一周中的一天
那么我们在循环体中有什么呢
- 检查
是否为周日cal
- 如果是,则提前7天进行校准。不仅如此,还要以7的速度继续前进李>
- 如果
不是星期天,则将其提前到一周的第二天,并让cal
继续提前1i
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开始