日付の加算・減算
C#で日付データを扱う際、「特定の基準日からN日後の日付を求めたい」(例: 登録日から30日後の有効期限)や、「N日前の日付を計算したい」(例: 本日から7日前の日付)といった日付計算は非常に一般的な処理です。
DateTime構造体は、このような日付の加算・減算を簡単に行うためにAddDaysメソッドを提供しています。
DateTime.AddDays(double value) メソッド
AddDaysメソッドは、DateTimeオブジェクトに対して、指定した日数(double型)を加算します。
valueに正の数(例:10)を指定すると、10日後の未来の日付が返されます。valueに負の数(例:-7)を指定すると、7日前の過去の日付が返されます。
重要な特性:DateTimeの不変性(Immutable)
DateTime構造体は**不変(Immutable)**です。AddDaysメソッドは、元のDateTimeオブジェクトを直接変更しません。
代わりに、計算結果として得られる新しいDateTimeオブジェクトを戻り値として返します。したがって、計算結果を利用するには、必ず新しい変数に代入するか、元の変数に再代入する必要があります。
コード例1:N日後を求める(未来の日付)
AddDaysに正の数を渡して、未来の日付を計算する例です。プロジェクトの開始日(startDate)から90日後のリリース予定日(releaseDate)を計算します。
using System;
public class AddDaysFutureExample
{
public static void Main()
{
// 基準日: 2025年10月1日
DateTime startDate = new DateTime(2025, 10, 1);
double daysToAdd = 90.0;
// 90日後を計算
// AddDaysは新しいDateTimeインスタンスを返す
DateTime releaseDate = startDate.AddDays(daysToAdd);
Console.WriteLine($"プロジェクト開始日: {startDate:yyyy/MM/dd}");
Console.WriteLine($"リリース予定日 (90日後): {releaseDate:yyyy/MM/dd}");
}
}
出力結果:
プロジェクト開始日: 2025/10/01
リリース予定日 (90日後): 2025/12/30
コード例2:N日前を求める(過去の日付)
AddDaysに負の数を渡すことで、過去の日付を簡単に計算できます。DateTime.Today(今日の日付)から、14日前の日付を取得する例です。
using System;
public class AddDaysPastExample
{
public static void Main()
{
// 基準日: 今日 (この例では 2025/11/13 と仮定)
DateTime today = DateTime.Today;
double daysToSubtract = -14.0;
// 14日前を計算
DateTime twoWeeksAgo = today.AddDays(daysToSubtract);
Console.WriteLine($"今日の日付: {today:yyyy/MM/dd}");
Console.WriteLine($"14日前の日付: {twoWeeksAgo:yyyy/MM/dd}");
}
}
出力結果(仮に今日が2025/11/13の場合):
今日の日付: 2025/11/13
14日前の日付: 2025/10/30
補足:AddDays以外のAddメソッド
DateTime構造体は、AddDays以外にも、特定の部分(月、時、分など)を加算・減算するためのメソッドを多数提供しています。基本的な使い方はAddDaysと同じです(負の数を渡せば減算になります)。
AddMonths(int months): Nヶ月後/Nヶ月前AddYears(int years): N年後/N年前AddHours(double hours): N時間後/N時間前AddMinutes(double minutes): N分後/N分前AddSeconds(double seconds): N秒後/N秒前
まとめ
DateTime.AddDays(double value)メソッドは、C#で日付の加算・減算(N日後・N日前)を行うための最も標準的で簡単な方法です。
- 正の数で未来を、負の数で過去の日付を計算できます。
DateTimeの不変性(Immutable)により、元の値は変更されず、常に新しいDateTimeオブジェクトが返される点に注意が必要です。
