how to identify leap years

29 visualizaciones (últimos 30 días)
Anisia a
Anisia a el 18 de Mayo de 2020
Respondida: Siva Charan el 30 de Sept. de 2023
Hi,
I am trying to create a function that takes 3 +ve integer scalar inputs year, month and date. If these 3 represent a valid date return true otherwise return false. My code is running for most of the input. But I am having problem with leap years. The code I wrote is given below. Can anyone please point out my mistake.
function valid= valid_date(year, month, date)
v=1;
a= mode(year,4);
b= mode(year,100);
c= mode(year,400);
if ~isscalar(year) || year<1 || year~=fix(year) || ~isscalar(month) || month<1 || month~=fix(month) ||~isscalar(date)|| date<1 || date~=fix(date)
v= 0;
end
if v==0
valid=false;
return
end
if 0>month || month>12
v= 0;
elseif (month==1 ||month==3|| month==5 || month==7 || month==8|| month==10|| month==12)
if 0<date&& date<=31
v=1;
else
v=0;
end
elseif (month== 4 ||month==6|| month==9 || month==11)
if 0<date&& date<31
v=1;
else
v=0;
end
elseif month==2
if date==29
if (a==0 && b~=0) || c==0
v=1;
else
v=0;
end
elseif 0<date && date<29
v=1;
else
v=0;
end
end
if v==0
valid=false;
else
valid=true;
end

Respuestas (2)

Siva Charan
Siva Charan el 30 de Sept. de 2023
Use this subfunction and call from the main function.
if the year is divisible by 100 and not divisible by 400, it is not a leap year. millennium years(1600, 1700, 1800...) should be divisible by 400 to be leap years, for others, any year that is divisible by 4 can be a leap year.
function leapyear = checkleap(year)
if mod(year,100)==0
if mod(year,400)==0
leapyear = true;
else
leapyear = false;
end
elseif mod(year,4) == 0
leapyear = true;
else
leapyear = false;
end
end

Stijn Haenen
Stijn Haenen el 18 de Mayo de 2020
Editada: Stijn Haenen el 18 de Mayo de 2020
There is a leap year every four years, so you can use this:
if mod(year,4)==0
'leap year'
else
'not a leap year'
end
  4 comentarios
Stephen23
Stephen23 el 18 de Mayo de 2020
These are all divisible by four: 1500, 1700, 1800, 1900, 2100, 2200, 2300, 2500, but none of them are leap years.
Steven Lord
Steven Lord el 18 de Mayo de 2020
Yes. The Wikipedia page has the algorithm for how to determine whether a year is a leap year.

Iniciar sesión para comentar.

Categorías

Más información sobre Time Series Objects en Help Center y File Exchange.

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by