Я пишу программу для отображения Дня для данной даты. (Например, четверг на 1 января 1970 года.)
При попытке этого у меня есть некоторые проблемы.
Это моя программа.
/*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 дату в понедельник или субботу.
(И если я выбрал субботу как первый день, я получаю неправильные ответы.)
кто-нибудь, пожалуйста, объясните.
Заранее спасибо.