年間積算日(通日)とは
C#で日付処理を行う際、特定の日付が「その年の1月1日から数えて何日目か」を知りたい場合があります。この値を「年間積算日(通日)」または「Day of the Year」と呼びます。
例えば、1月1日は「1」日目、2月1日は「32」日目(1月が31日のため)となります。
DateTime構造体は、この年間積算日を簡単に取得するためのDayOfYearプロパティを提供しています。
DateTime.DayOfYear プロパティ
DayOfYearは、DateTimeオブジェクトの読み取り専用プロパティで、その日付がその年の何日目かを示すint型の値を返します。
- 戻り値: 1(1月1日)から 366(うるう年の12月31日)までの整数値。
コード例1:本日が年間の何日目かを調べる
DateTime.Today(またはDateTime.Now)とDayOfYearプロパティを組み合わせることで、今日が今年の何日目であるかを簡単に計算できます。
using System;
public class DayOfYearExample
{
public static void Main()
{
// 今日の日付を取得
DateTime currentDate = DateTime.Today;
// DayOfYear プロパティで年間積算日を取得
int dayNumber = currentDate.DayOfYear;
Console.WriteLine($"本日 ({currentDate:yyyy/MM/dd}) は、");
Console.WriteLine($"{currentDate.Year}年の {dayNumber} 日目です。");
}
}
出力結果(仮に2025年11月13日に実行した場合):
本日 (2025/11/13) は、
2025年の 317 日目です。
(2025年は平年。31(1月)+28(2月)+…+31(10月)+13(11月) = 317)
コード例2:うるう年(閏年)と平年での違い
DayOfYearプロパティは、対象の年がうるう年であるか(2月29日が存在するか)を自動的に考慮します。
そのため、うるう年の3月1日と平年の3月1日では、DayOfYearの値が1日分異なります。
using System;
public class LeapYearDayOfYearExample
{
public static void Main()
{
// --- 平年 (2025年) の3月1日 ---
DateTime dateInNormalYear = new DateTime(2025, 3, 1);
int dayOfYearNormal = dateInNormalYear.DayOfYear;
// 1月(31) + 2月(28) + 3月(1) = 60
Console.WriteLine($"{dateInNormalYear:yyyy/MM/dd} (平年) は {dayOfYearNormal} 日目です。");
// --- うるう年 (2024年) の3月1日 ---
DateTime dateInLeapYear = new DateTime(2024, 3, 1);
int dayOfYearLeap = dateInLeapYear.DayOfYear;
// 1月(31) + 2月(29) + 3月(1) = 61
Console.WriteLine($"{dateInLeapYear:yyyy/MM/dd} (うるう年) は {dayOfYearLeap} 日目です。");
}
}
出力結果:
2025/03/01 (平年) は 60 日目です。
2024/03/01 (うるう年) は 61 日目です。
まとめ
DateTime.DayOfYearプロパティは、C#で年間積算日(通日)を取得するための最も簡単な方法です。
DateTime.IsLeapYearメソッドと組み合わせる必要はなく、DayOfYearプロパティを参照するだけで、うるう年を自動的に考慮した正しい日数(1から365、または366)が返されます。これは、年間の進捗率(例: dayNumber / 365.0)を計算する際などに役立ちます。
