有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

date查找Java未来十年特定节日的一周中的哪一天

我一直在与一个关于获取下一个十年中某个特定节日的每周天数的程序进行斗争,因此运行结果将显示接下来10年中每周的10天。我有编码,但不知道编码是如何工作的

这是书中的代码,我对它的日期时间算法特别困惑

public class YearTest {

    public static void main(String[] args) {
        int[] date = new int[10];
        date = J(2010, 4);
        M(2010, date);
        O(2010, date);
    }

    public static int[] J(int year, int day) {
        int[] date = new int[10];
        date[0] = day;

        for (int i = 1; i < 10; i++) {
            if (
                ((year + i - 1) % 4 == 0) &&
                ((year + i - 1) % 100) != 0
            )
                date[i] = (date[i - 1] + 366) % 7;
            else
                date[i] = (date[i - 1] + 365) % 7;
        }

        System.out.println("January: ");
        for (int i = 0; i < 10; i++)
            System.out.println(date[i] + 1 + " ");

        return date;
    }

}

下面的代码是为另外两个节日编写的,但我认为我们应该使用M(2010年,日期)来代替?因为日期包括年和日,但这里我们只需要日

M(2010, date);
O(2010, date);

提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    闰年

    该代码正在为Leap Year进行调整

    地球绕太阳的轨道(一年)和地球绕其轴线的自转(一天)不同步。因此,我们必须调整日期,以保持我们的每日日历正确。这一调整接近四分之一天,但并不完全如此。所以每四年我们会增加一天,除了几个世纪我们不会,除了我们经常做的事

    算法

    从维基百科的文章

    if (year is not divisible by 4) then (it is a common year)
    else
    if (year is not divisible by 100) then (it is a leap year)
    else
    if (year is not divisible by 400) then (it is a common year)
    else (it is a leap year)
    

    使用日期时间库

    我强烈建议您使用日期时间库,而不是滚动自己的代码。对于Java,这意味着Joda-Time或Java。Java8中的时间包(受Joda time的启发,由JSR310定义)

    避免使用旧的java。util。日期和日期。日历类与Java捆绑在一起,因为它们在设计和实现上都存在缺陷,这是出了名的麻烦