gpt4 book ai didi

java - 将 01/01/0001 日期作为星期一是否正确?

转载 作者:行者123 更新时间:2023-11-29 09:20:34 25 4
gpt4 key购买 nike

我正在编写一个程序来显示给定日期的日期。 (例如,1970 年 1 月 1 日为星期四。)在尝试时我遇到了一些问题。

这是我的程序。

/*Concept: 
The noOfDays variable will count the no of days since 01/01/0001. And this will be Day one(1). E.g
noOfDays = 365 for 01/12/0001 and noOfDays = 731 for 01/01/0003 and so on....
Since I taken Monday as 01/01/0001,the day of the specific date can be achieved by switching(noOfDays%7)
E.g. 365 % 7 = 1. So, the 365th day is monday...
*/

import java.util.Scanner;
class DayDisplayer
{
long noOfDays;
int month;
int days;
int year;
Scanner scan;
int countYear;
int countMonth;

DayDisplayer()
{
scan = new Scanner(System.in);
noOfDays = 0;
System.out.println("Enter the date please");

days = scan.nextInt();
month = scan.nextInt();
year = scan.nextInt();

System.out.println("Your Date is: "+days+"/"+month+"/"+year);



}

boolean leapYearCheck(int year)
{
if( ((year%100 == 0) && (year%400 != 0)) || (year%4 != 0) ) // when it is divisible by 100 and not by 400.
return false;
else
return true;

}

boolean isThere31Days()
{
if ( ( (countMonth >> 3) ^ (countMonth & 1) ) == 1 )
return true;
else
return false;

}

void getDaysThatInDays()
{
noOfDays += days;
}

void getDaysThatInMonth()
{

countMonth = 1;

while(countMonth<month)
{
if( countMonth == 2 )
if( leapYearCheck(year) == true)
noOfDays += 29;
else
noOfDays += 28;
else
if ( isThere31Days())
noOfDays += 31;
else
noOfDays += 30;

countMonth++;
}



}

void getDaysThatInYear()
{
countYear = 1;

while(countYear<year)
{
if( leapYearCheck(countYear)== true )
noOfDays += 366;
else
noOfDays += 365;

countYear ++;
}
}

void noOfDaysAndDayName()
{
System.out.println("The noOfDays is"+noOfDays);

System.out.println("And Your Day is :");

int day;

day = (int)(noOfDays%7);
switch(day)
{

case 0:
System.out.println("Sunday");
break;
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
case 6:
System.out.println("Saturday");
break;
}

}

}// end of MonthToDate class

public class Main
{
public static void main(String args[])
{

DayDisplayer dd= new DayDisplayer();

dd.getDaysThatInYear();
dd.getDaysThatInMonth();
dd.getDaysThatInDays();

dd.noOfDaysAndDayName();


}



}

在这段代码中,当我将 01/01/0001 作为星期一并计算其他日期时。我得到了正确的答案。

但在 www.timeanddate.com他们将 01/01/0001 视为星期六的网站。但对于其他最近的日期(比如 17/7/2011),他们仍然给出了正确的答案(如星期日)。

我猜这些滞后是由于朱利叶系统向格里高利系统的迁移。

但我怀疑我从 0001 年开始计算天数的方法是否正确?

还有一个疑问是01/01/0001日期是周一还是周六。(如果我把星期六作为我的第一天,我会得到错误的答案。)

有人请解释。

提前致谢。

最佳答案

一个问题可能会在您的开头评论中出现一个差一错误:

The noOfDays variable will count the no of days since 01/01/0001. E.g 
noOfDays = 365 for 01/12/0001 and noOfDays = 731 for 01/01/0003 and so on.

也就是说 0001-01-01 将是第 0 天(自引用日期起 0 天),这反过来意味着您的公历上的 0001-12-31 将是 364,而不是 365。

您可以通过以下两种方式之一进行调整:

  • 定义 0001-01-01 将是第 1 天(因此引用的评论片段的其余部分是正确的)。
  • 将评论值更改为 364 和 730。

逆向工程的另一个问题可以追溯到那个年代,那就是理解“预测的”公历。该术语的严格含义是“表示事物在实际存在之前就已经存在”,并且适用于向前,但该术语也用于日历计算中以指代在时间上向后应用当前规则。目前的问题是公历及其闰年规则(可被 400 整除,或可被 4 整除但不能被 100 整除)在第 1 年不存在。问题是:您提到的网站是否补偿儒略历和公历之间的转换? (这背后有很多复杂因素;日历非常不稳定,即使在罗马帝国,大约在公元前 55 年到公元 200 年之间。)


一本考虑日期问题的好书是 Calendrical Calculations .

关于java - 将 01/01/0001 日期作为星期一是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6722021/

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