Código Java para calcular el año bisiesto
Estoy siguiendo el libro "El arte y la ciencia de Java" y muestra cómo calcular un año bisiesto. El libro utiliza la biblioteca de ACM Java Task Force.
Aquí está el código que utilizan los libros:
import acm.program.*;
public class LeapYear extends ConsoleProgram {
public void run()
{
println("This program calculates leap year.");
int year = readInt("Enter the year: ");
boolean isLeapYear = ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0));
if (isLeapYear)
{
println(year + " is a leap year.");
} else
println(year + " is not a leap year.");
}
}
Así es como calculé el año bisiesto.
import acm.program.*;
public class LeapYear extends ConsoleProgram {
public void run()
{
println("This program calculates leap year.");
int year = readInt("Enter the year: ");
if ((year % 4 == 0) && year % 100 != 0)
{
println(year + " is a leap year.");
}
else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0))
{
println(year + " is a leap year.");
}
else
{
println(year + " is not a leap year.");
}
}
}
¿Hay algún problema con mi código o debo usar el que proporciona el libro?
EDITAR: Ambos códigos anteriores funcionan bien. Lo que quiero preguntar es qué código es la mejor manera de calcular el año bisiesto.
Aceptado
La implementación correcta es:
public static boolean isLeapYear(int year) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
return cal.getActualMaximum(Calendar.DAY_OF_YEAR) > 365;
}
Pero si vas a reinventar esta rueda entonces:
public static boolean isLeapYear(int year) {
if (year % 4 != 0) {
return false;
} else if (year % 400 == 0) {
return true;
} else if (year % 100 == 0) {
return false;
} else {
return true;
}
}
java.time.Year::isLeap
Me gustaría agregar la nueva java.time
forma de hacer esto con la Year
clase y isLeap
el método:
java.time.Year.of(year).isLeap();