西暦を渡して閏年かどうか判定するメソッド
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. 実装ポイント
チェック順 | 条件 | 理由 |
---|---|---|
1 | year % 400 == 0 | 400 で割り切れる年は必ず閏年(例: 2000) |
2 | year % 100 == 0 で除外 | 100 で割り切れる年は平年(例: 1900, 2100) |
3 | year % 4 == 0 | 4 で割り切れる年は閏年(上記例外を除く) |
三項演算子やパターン マッチングを避け、読みやすさを優先した典型的な書き方です。
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回
ディスカッション
コメント一覧
まだ、コメントがありません