gpt4 book ai didi

java - 日期检查循环?

转载 作者:行者123 更新时间:2023-12-02 11:28:27 25 4
gpt4 key购买 nike

我有一个任务,要使用给定的方法请求创建一个 Date 类。其中一种方法以整数形式返回星期几,其中 1=星期日.....6=星期五,0=星期六。这是方法:

public int dayInWeek () {
int day, month;
int year; //2 last numbers of the year
int century; //2 first numbers of the year
if(_month==1 || _month==2) {
day= _day;
month= _month + 12;
year= (_year-1) % 100;
century= (_year-1) / 100;
}
else {
day= _day;
month= _month;
year= _year % 100;
century= _year / 100;
}

return (day + (26*(month+1))/10 + year + year/4 + century/4 - 2*century)%7;
}

现在,在收到星期几后,分配提示可能有一个日期结果可能为负。我试图制作一个 main() ,它将循环遍历给定范围年份 1800-2100 中的所有日子、月份和年份,但只会变得越来越困惑和迷失。如果有人能提示我如何实现它,而不需要所有现有的日历/日期/等类,我将不胜感激,因为这样对我来说只会变得困惑。谢谢。

编辑:更多信息:

//constructors
/**
* creates a new Date object if the date is valid, otherwise creates the date 1/1/2000
* @param _day the day of the month (1-31)
* @param _month the month in the year (1-12)
* @param _year the year (1800-2100)
*/
public Date (int day, int month, int year) {
if (isValidDate (day, month, year)) {
_day=day;
_month=month;
_year=year;
}
else {
setToDefault();
}
}

/**
* copy constructor
* @param other the date to be copied
*/
public Date (Date other) {
_day= other._day;
_month= other._month;
_year= other._year;
}
//methods
private boolean isValidDate(int day, int month, int year) {
if (year<MIN_YEAR || year>MAX_YEAR) {
return false;
}
if (month<MIN_MONTH || month>MAX_MONTH) {
return false;
}
if (day<MIN_DAY) {
return false;
}
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: return day<=31;
case 4:
case 6:
case 9:
case 11: return day<=30;

default: return leap(year) ? day<=29 : day<=28; //month==2;
}
}

/**
* check if leap year
* @param y year to check
* @return true if given year is leap year
*/
private static boolean leap (int y) {
return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}

希望这已经足够了。

最佳答案

当年份为 2100 时,结果为负。用今天的日期(月 = 3,日期 = 24,年 = 2100)进行测试,您可以看到它给出了负数。

如果你看一下Code implementation for Zeller's congruence ,您可以通过将公式更改为来避免该问题:

return dayOfWeek= (day + (26*(month+1))/10 + year + year/4 + century/4+ 5*century)%7;

关于java - 日期检查循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49462569/

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