Bildiğimiz gibi her 4 yılda bir Şubat ayı 29 gün çeker, bu da her yıldan artan 6 saatin dört yılda bir yıla 1 gün olarak eklenmesinden kaynaklanır. Java ile artık yılları tespit etmek için iki farklı yol izleyebiliriz. Bu yollardan birisi
Calendar sınıfını kullanarak bir yılın kaç gün olduğunu hesaplayan bir metod tanımlayabiliriz, ya da
Artık yıl kontrol hesabını yapabiliriz. Bu hesaba göre bir yıl:
4'e kalansız bölünebiliyorsa VE 100'e kalansız bölünemiyorsa VE 400'e kalansız bölünebiliyorsa artık yıldır. Şimdi her iki yöntemi de kullanarak Java'da artık yılları nasıl bulabileceğimizi inceleyelim. Her iki yöntem ile de 1990 ile 2030 yılları arasındaki tüm yılların artık yıl olup olmadıklarına bakalım.
1. Yol: Calendar sınıfını kullanarak bir yılın kaç gün olduğuna bakmak
public static void main(String[] args) {
for (int i=1990; i<=2030; i++)
{
if (artikYilKontrolu(i))
System.out.println(i+" Şubat ayı 29 gün çeker");
}
}
public static boolean artikYilKontrolu(int yil) {
Calendar takvim = Calendar.getInstance();
takvim.set(Calendar.YEAR, yil);
return takvim.getActualMaximum(Calendar.DAY_OF_YEAR) > 365;
}
Çıktı:
1992 Şubat ayı 29 gün çeker
1996 Şubat ayı 29 gün çeker
2000 Şubat ayı 29 gün çeker
2004 Şubat ayı 29 gün çeker
2008 Şubat ayı 29 gün çeker
2012 Şubat ayı 29 gün çeker
2016 Şubat ayı 29 gün çeker
2020 Şubat ayı 29 gün çeker
2024 Şubat ayı 29 gün çeker
2028 Şubat ayı 29 gün çeker
2. Yol: Artık yıl hesabını kullanmak
public static void main(String[] args) {
for (int i=1990; i<=2030; i++)
{
if (artikYilKontrolu(i))
System.out.println(i+" Şubat ayı 29 gün çeker");
}
}
public static boolean artikYilKontrolu(int yil) {
if (yil % 4 != 0)
return false;
else if (yil % 400 == 0)
return true;
else if (yil % 100 == 0)
return false;
else
return true;
}
Çıktı:
1992 Şubat ayı 29 gün çeker
1996 Şubat ayı 29 gün çeker
2000 Şubat ayı 29 gün çeker
2004 Şubat ayı 29 gün çeker
2008 Şubat ayı 29 gün çeker
2012 Şubat ayı 29 gün çeker
2016 Şubat ayı 29 gün çeker
2020 Şubat ayı 29 gün çeker
2024 Şubat ayı 29 gün çeker
2028 Şubat ayı 29 gün çeker