西暦を渡して閏年かどうか判定するメソッド

1. 最小実装(bool で返す)

/// <summary>
/// 西暦 year が閏年なら true、平年なら false を返す。
/// グレゴリオ暦のルールに従う:
///   1. 400 で割り切れる年は閏年
///   2. 100 で割り切れる年は平年
///   3. 4 で割り切れる年は閏年
///   4. それ以外は平年
/// </summary>
static bool IsLeapYear(int year)
{
    return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
}

2. 使い方例

Console.WriteLine(IsLeapYear(2024)); // True
Console.WriteLine(IsLeapYear(2100)); // False
Console.WriteLine(IsLeapYear(2000)); // True

3. 実装ポイント

チェック順条件理由
1year % 400 == 0400 で割り切れる年は必ず閏年(例: 2000)
2year % 100 == 0 で除外100 で割り切れる年は平年(例: 1900, 2100)
3year % 4 == 04 で割り切れる年は閏年(上記例外を除く)

三項演算子やパターン マッチングを避け、読みやすさを優先した典型的な書き方です。

4. 発展形

  • DateTime.IsLeapYear を使う.NET 標準ライブラリに同名メソッドがあります。内部で上記ロジックを実装済み。
bool leap = DateTime.IsLeapYear(year);
  • 入力バリデーション実際のカレンダー演算では 1582 年のグレゴリオ暦採用以前をどう扱うか検討が必要です。必要なら ArgumentOutOfRangeException を投げて制限しましょう。
  • 拡張メソッド
public static class IntExtensions
{
    public static bool IsLeap(this int year) => 
        (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
}

// 使い方
bool leap = 2028.IsLeap();

shこのメソッドをベースに、年月日の妥当性チェックやカレンダー系ユーティリティに発展させてみてください。

訪問数 6 回, 今日の訪問数 1回

C#,メソッド

Posted by hidepon