Я пытаюсь создать функцию, в которой задан год, где year > 1999
, и возвращает значение 0-6, где Sunday = 0, Monday = 1 ... Saturday = 6
, что соответствует дню недели, когда первый день ноября включен. Поскольку я знаю 1 ноября 2000 года 3 (среда), я использую это как NOV1
. Я знаю, что мне нужно помнить годы високосного поведения, поэтому я должен сделать заявление if
, которое поможет. Я не знаю, почему он не работает должным образом в течение лет, превышающих 2100. Помогите!Функция дня недели не работает
public static int firstOfMonth(int year)
{
int raw = year - 2000;
int leapYears = raw/4;
int nonLeapYears = 0;
if (raw >= 100)
{
nonLeapYears = raw/100;
leapYears = leapYears - (nonLeapYears - (nonLeapYears/4));
}
else
{
nonLeapYears = 0;
}
return (((NOV1 + (raw * 365) - leapYears)) % 7);
}
снова, Nov1 = 3
Даты и время - невероятно сложные конструкции для программирования. Как правило, лучше использовать API Java «Календарь». – christopher
Как правило, лучше использовать что-то вроде времени в стиле Joda, чем невероятно плохо спроектированный календарь api. –
@christopher Это никогда не рекомендуется использовать API «Календарь», это ужасный API. Java8 получил 'java.time', и есть также joda-время, которое вы можете использовать, если вы запускаете более ранний jre – amit