gpt4 book ai didi

java - 如何获取特定年份的所有星期日日期?

转载 作者:行者123 更新时间:2023-12-02 00:55:49 26 4
gpt4 key购买 nike

完全重复: How to get all dates of sundays in a particular year in Java

<小时/>
int year = 2009;
Calendar cal = new GregorianCalendar(year, Calendar.JANUARY, 1);
for (int i = 0, inc = 1; i < 366 && cal.get(Calendar.YEAR) == year; i+=inc) {
if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
// this is a sunday
cal.add(Calendar.DAY_OF_MONTH, 7);
inc = 7;
} else {
cal.add(Calendar.DAY_OF_MONTH, 1);
}
}

Miles D given code ,我正在获取从第一个月的第二个星期日到明年的第一个星期日的所有星期日的日期。实际上我只是在寻找特定的年份,而且都是星期日的日期,请您再次看到它......

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

最佳答案

编程新手?好啦,我们一起看一下代码吧!

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

if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)

这会检查日历cal中存储的当前日期是否有DAY_OF_WEEK,即SUNDAY。如果是,它会做一件事,如果不是,它会做另一件事。

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

for (int i = 0, inc = 1; i < 366 && cal.get(Calendar.YEAR) == year; i+=inc)

for 循环分为三个部分:初始化、条件和“增量”。初始化仅在循环开始运行之前运行一次:

int i = 0, inc = 1

正如我确信你所知,它创建了两个变量:iinc。它将 i 设置为 0,将 inc 设置为 1。

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

i < 366 && cal.get(Calendar.YEAR) == year

它检查i是否仍然小于366,并且存储在cal中的日期是否具有YEARyear。实际上,这确保了我们仍处于开始时的同一年。

for 的最后一部分是这样的:

i+=inc

它将 inc 的值添加到 i 的值中,并将其存储在 i 中。

那么到目前为止我们在循环中得到了什么?

  1. 循环以 i 为 0 和 inc 为 1
  2. 只要
    • i 小于公历年的长度(闰年为 366),
    • (并且)cal 中的日期仍与 year 中的年份相同。
  3. iinc 推进

让我们再看一下循环体:

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_OF_MONTHadded到cal。这意味着在循环的下一次迭代中,表达式 i+=inc 将表示 i+=7 而不是 i+=1,即当 inc 为 1 时执行(就像初始化完成时一样。)

如果不是星期日,则将单个 DAY_OF_WEEK 添加到 cal 中。

那么循环体内有什么?

  • 检查 cal 是否是星期日
    • 如果是,请将 cal 提前 7 天。不仅如此,还要让 i 继续前进 7!
    • 如果 cal 不是周日,则将其提前到一周的第二天,并让 i 继续提前 1。

换句话说,循环将从 cal 的初始值开始,然后将 cal 向前移动一天,直到找到星期日。一旦执行此操作,cal 就会一次向前移动 7 天,直到超过 366 天,或者直到 cal 进入另一年!

因此,通过(咳咳)简要检查上面的代码,我们得出结论,它实际上并没有“得到”一年中的星期日。它只是对它们进行迭代,然后由您添加代码来实际处理它找到的星期日。

现在我们已经一起检查了代码,我确信这样做很简单!实际上只需添加几行即可。您只需添加一行,每次循环进入它“知道”cal 是星期日的部分时,[在此插入您想要的任何内容]。

很简单,不是吗?

关于java - 如何获取特定年份的所有星期日日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/601380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com