C#.NETメモ:DateTime:○日後や○日前等の日時を取得

C#.NETで○日後や○日前等の日時を取得する方法をメモしておきます。

1ヶ月の日数は28〜31日と一定ではない為、月が変わる時の計算を自力でやるのは大変かと思います。
これを自前で処理をしようとするとなかなか難しかったりしますが、
DateTimeの以下のメソッドを使えば簡単に取得することができます。
内容 メソッド
年を加算AddYears
月を加算AddMonths
日を加算AddDays
内容 メソッド
時を加算AddHours
分を加算AddMinutes
秒を加算AddSeconds
内容 メソッド
ミリ秒を加算AddMilliseconds

例えば、today.AddDays(5)で5日後、today.AddDays(-5)で5日前を取得することができます。
5日後に年や月が変わっても計算してくれます。便利!

これを利用すれば、○日後に年や月が変わるかどうかを調べたり月末の日付を取得することもできます。

使用例

内容 記述例 出力
年後の日付を取得
DateTime dt1 = new DateTime(2013, 1, 1);
DateTime dt2 = dt1.AddYears(5);
Console.WriteLine("{0:yyyy/MM/dd}¥n↓↓↓¥n{1:yyyy/MM/dd}", dt1, dt2);
2013/01/01
↓↓↓
2018/01/01
年前の日付を取得
DateTime dt1 = new DateTime(2013, 1, 1);
DateTime dt2 = dt1.AddYears(-5);
Console.WriteLine("{0:yyyy/MM/dd}¥n↓↓↓¥n{1:yyyy/MM/dd}", dt1, dt2);
2013/01/01
↓↓↓
2008/01/01
ヶ月後の日付を取得
DateTime dt1 = new DateTime(2013, 1, 1);
DateTime dt2 = dt1.AddMonths(5);
Console.WriteLine("{0:yyyy/MM/dd}¥n↓↓↓¥n{1:yyyy/MM/dd}", dt1, dt2);
2013/01/01
↓↓↓
2013/06/01
ヶ月前の日付を取得
DateTime dt1 = new DateTime(2013, 1, 1);
DateTime dt2 = dt1.AddMonths(-5);
Console.WriteLine("{0:yyyy/MM/dd}¥n↓↓↓¥n{1:yyyy/MM/dd}", dt1, dt2);
2013/01/01
↓↓↓
2012/08/01
日後の日付を取得
DateTime dt1 = new DateTime(2013, 1, 1);
DateTime dt2 = dt1.AddDays(5);
Console.WriteLine("{0:yyyy/MM/dd}¥n↓↓↓¥n{1:yyyy/MM/dd}", dt1, dt2);
2013/01/01
↓↓↓
2013/01/06
日前の日付を取得
DateTime dt1 = new DateTime(2013, 1, 1);
DateTime dt2 = dt1.AddDays(-5);
Console.WriteLine("{0:yyyy/MM/dd}¥n↓↓↓¥n{1:yyyy/MM/dd}", dt1, dt2);
2013/01/01
↓↓↓
2012/12/27
時間後の時刻を取得
DateTime dt1 = new DateTime(2013, 1, 1, 12, 0, 0, 0);
DateTime dt2 = dt1.AddHours(5);
Console.WriteLine("{0:HH:mm:ss.fff}¥n↓↓↓¥n{1:HH:mm:ss.fff}", dt1, dt2);
12:00:00.000
↓↓↓
17:00:00.000
時間前の時刻を取得
DateTime dt1 = new DateTime(2013, 1, 1, 12, 0, 0, 0);
DateTime dt2 = dt1.AddHours(-5);
Console.WriteLine("{0:HH:mm:ss.fff}¥n↓↓↓¥n{1:HH:mm:ss.fff}", dt1, dt2);
12:00:00.000
↓↓↓
07:00:00.000
分後の時刻を取得
DateTime dt1 = new DateTime(2013, 1, 1, 12, 0, 0, 0);
DateTime dt2 = dt1.AddMinutes(5);
Console.WriteLine("{0:HH:mm:ss.fff}¥n↓↓↓¥n{1:HH:mm:ss.fff}", dt1, dt2);
12:00:00.000
↓↓↓
12:05:00.000
分後の時刻を取得
DateTime dt1 = new DateTime(2013, 1, 1, 12, 0, 0, 0);
DateTime dt2 = dt1.AddMinutes(-5);
Console.WriteLine("{0:HH:mm:ss.fff}¥n↓↓↓¥n{1:HH:mm:ss.fff}", dt1, dt2);
12:00:00.000
↓↓↓
11:55:00.000
秒後の時刻を取得
DateTime dt1 = new DateTime(2013, 1, 1, 12, 0, 0, 0);
DateTime dt2 = dt1.AddSeconds(5);
Console.WriteLine("{0:HH:mm:ss.fff}¥n↓↓↓¥n{1:HH:mm:ss.fff}", dt1, dt2);
12:00:00.000
↓↓↓
12:00:05.000
秒後の時刻を取得
DateTime dt1 = new DateTime(2013, 1, 1, 12, 0, 0, 0);
DateTime dt2 = dt1.AddSeconds(-5);
Console.WriteLine("{0:HH:mm:ss.fff}¥n↓↓↓¥n{1:HH:mm:ss.fff}", dt1, dt2);
12:00:00.000
↓↓↓
11:59:55.000
ミリ秒後の時刻を取得
DateTime dt1 = new DateTime(2013, 1, 1, 12, 0, 0, 0);
DateTime dt2 = dt1.AddMilliseconds(5);
Console.WriteLine("{0:HH:mm:ss.fff}¥n↓↓↓¥n{1:HH:mm:ss.fff}", dt1, dt2);
12:00:00.000
↓↓↓
12:00:00.005
ミリ秒後の時刻を取得
DateTime dt1 = new DateTime(2013, 1, 1, 12, 0, 0, 0);
DateTime dt2 = dt1.AddMilliseconds(-5);
Console.WriteLine("{0:HH:mm:ss.fff}¥n↓↓↓¥n{1:HH:mm:ss.fff}", dt1, dt2);
12:00:00.000
↓↓↓
11:59:59.995

応用例

内容 記述例 出力
5日後に月が変わるか調べる
DateTime dt1 = new DateTime(2013, 1, 27);
DateTime dt2 = dt1.AddDays(5);
Console.WriteLine("{0:yyyy/MM/dd}¥n↓↓↓¥n{1:yyyy/MM/dd}", dt1, dt2);
if (dt1.Month != dt2.Month)
{
    Console.WriteLine("月が変わりました。");
}
2013/01/27
↓↓↓
2013/02/01
月が変わりました。
月末の日付を取得
(※翌月1日の前日から取得)
int m = 2;
DateTime dt1 = new DateTime(2013, m + 1, 1);
DateTime dt2 = dt1.AddDays(-1);
Console.WriteLine("{0}月の末日は{1}日です。", m, dt2.Day);
2月の末日は28日です。


コメント
コメントする








    
この記事のトラックバックURL
トラックバック