【C#】DateTime.DayOfYearプロパティで年間積算日(通日)を取得する方法

目次

年間積算日(通日)とは

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)を計算する際などに役立ちます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次