うるう年(閏年)の判定
C#でカレンダー処理や日付計算を行う際、特定の年が「うるう年(閏年)」であるかどうか(2月29日が存在するかどうか)を判定する必要がある場合があります。
うるう年の判定ロジック(4で割り切れる年はうるう年だが、100で割り切れる年はうるう年ではない。ただし、400で割り切れる年はうるう年である)は複雑です。
この判定を自前で実装する必要はなく、C#のDateTime構造体がIsLeapYearという静的メソッドを提供しています。
DateTime.IsLeapYear(int year) メソッド
DateTime.IsLeapYearは、引数として渡されたint型(整数)の年が、グレゴリオ暦においてうるう年であるかどうかを判定する静的メソッドです。
true: その年はうるう年です(2月29日が存在します)。false: その年はうるう年ではありません(平年です)。
コード例:IsLeapYear の使用
IsLeapYearメソッドを使用し、2024年(うるう年)と2025年(平年)をそれぞれ判定する例です。
using System;
public class LeapYearCheckExample
{
public static void Main()
{
// --- 例1: うるう年 (2024年) ---
int yearToCheck1 = 2024;
bool isLeap1 = DateTime.IsLeapYear(yearToCheck1);
Console.WriteLine($"年: {yearToCheck1}");
if (isLeap1)
{
Console.WriteLine("結果: うるう年です。");
}
else
{
Console.WriteLine("結果: うるう年ではありません。");
}
Console.WriteLine("---");
// --- 例2: 平年 (2025年) ---
int yearToCheck2 = 2025;
bool isLeap2 = DateTime.IsLeapYear(yearToCheck2);
// 条件演算子(三項演算子)を使った判定
string resultMessage = isLeap2 ? "うるう年です。" : "うるう年ではありません。";
Console.WriteLine($"年: {yearToCheck2}");
Console.WriteLine($"結果: {resultMessage}");
}
}
出力結果:
年: 2024
結果: うるう年です。
---
年: 2025
結果: うるう年ではありません。
応用:特定のDateTime変数がうるう年か調べる
DateTime.IsLeapYearは静的メソッドであるため、DateTimeオブジェクトのインスタンス(変数)から直接呼び出すことはできません。
もし、DateTime変数(例: orderDate)が持つ「年」がうるう年かどうかを調べたい場合は、その変数の.YearプロパティをIsLeapYearメソッドに渡します。
using System;
public class LeapYearInstanceExample
{
public static void Main()
{
DateTime orderDate = new DateTime(2028, 5, 10); // 2028年
// orderDate.IsLeapYear() とは書けない
// orderDate.Year (int型) をメソッドに渡す
bool isOrderYearLeap = DateTime.IsLeapYear(orderDate.Year);
Console.WriteLine($"日付 {orderDate:yyyy/MM/dd} の「年」 ({orderDate.Year}年) は...");
Console.WriteLine(isOrderYearLeap ? "うるう年です。" : "うるう年ではありません。");
}
}
出力結果:
日付 2028/05/10 の「年」 (2028年) は...
うるう年です。
まとめ
DateTime.IsLeapYear(int year)メソッドは、C#でうるう年かどうかを判定するための最も簡単で標準的な方法です。
複雑な日付計算やカレンダーロジックを実装する際、自前で判定ロジックを組むのではなく、このメソッドを利用することで、コードの正確性と可読性を高めることができます。
