未来の日時と過去の日時を取得する

未来と過去の日時を取得するには DateTime の下記のメソッドを利用します。

AddYears
AddMonths
AddDays
AddHours
AddMinutes
AddSeconds
AddMilliseconds

引数をプラスにすると未来の日時になり、マイナスにすると過去の日時になります。

using System;
using System.Text;
using System.Windows.Forms;

namespace myapp
{

	public partial class Form1 : Form
	{

		// うるう年の2月29日.
		const int Y4 = 2000;
		const int M2 =    2;
		const int D2 =   29;
		const int HH =    0;
		const int MM =   12;
		const int SS =   34;
		const int MS =  567;

		DateTime DtmBase;

		public Form1()
		{
			InitializeComponent();
		}

		private void Form1_Load( object sender, EventArgs e )
		{
			DtmBase = new DateTime( Y4, M2, D2, HH, MM, SS, MS );
		}

		// 日付を示す文字列を取得するメソッド.
		private bool get_string( ref string str, DateTime dtm )
		{

			int y4 = dtm.Year;
			int m2 = dtm.Month;
			int d2 = dtm.Day;
			int hh = dtm.Hour;
			int mm = dtm.Minute;
			int ss = dtm.Second;
			int ms = dtm.Millisecond;

			str = String.Format( "{0:d4}/{1:d2}/{2:d2}_{3:d2}:{4:d2}:{5:d2}_{6:d3}", y4, m2, d2, hh, mm, ss, ms );

			return true;

		}

		private void button1_Click( object sender, EventArgs e )
		{

			// 基本の日付(うるう年の2月29日)の文字列を取得する.
			String msg0 = "";
			get_string( ref msg0, DtmBase );

			// 1年後を取得する.
			DateTime dtm1 = DtmBase.AddYears( 1 );
			String msg1 = "";
			get_string( ref msg1, dtm1 );

			// 365日後を取得する.
			DateTime dtm2 = DtmBase.AddDays( 365 );
			String msg2 = "";
			get_string( ref msg2, dtm2 );

			String msg_all = String.Format( "{0}\r\n{1}\r\n{2}", msg0, msg1, msg2 );
			MessageBox.Show( msg_all );

		}

		private void button2_Click( object sender, EventArgs e )
		{

			DateTime dtm_dst00 = DtmBase.AddYears( 1 ); // 1年後を取得する.
			DateTime dtm_dst01 = DtmBase.AddMonths( 1 ); // 1月後を取得する.
			DateTime dtm_dst02 = DtmBase.AddDays( 1 ); // 1日後を取得する.
			DateTime dtm_dst03 = DtmBase.AddHours( 1 ); // 1時間後を取得する.
			DateTime dtm_dst04 = DtmBase.AddMinutes( 1 ); // 1分後を取得する.
			DateTime dtm_dst05 = DtmBase.AddSeconds( 1 ); // 1秒後を取得する.
			DateTime dtm_dst06 = DtmBase.AddMilliseconds( 1 ); // 1ミリ秒後を取得する.

			DateTime dtm_dst10 = DtmBase.AddYears( -1 ); // 1年前を取得する.
			DateTime dtm_dst11 = DtmBase.AddMonths( -1 ); // 1月前を取得する.
			DateTime dtm_dst12 = DtmBase.AddDays( -1 ); // 1日前を取得する.
			DateTime dtm_dst13 = DtmBase.AddHours( -1 ); // 1時間前を取得する.
			DateTime dtm_dst14 = DtmBase.AddMinutes( -1 ); // 1分前を取得する.
			DateTime dtm_dst15 = DtmBase.AddSeconds( -1 ); // 1秒前を取得する.
			DateTime dtm_dst16 = DtmBase.AddMilliseconds( -1 ); // 1ミリ秒前を取得する.


			// ------------------------------------------------
			// 基本の日付の文字列を取得する.
			String msg_base = "";
			get_string( ref msg_base, DtmBase );

			// ------------------------------------------------
			// 未来の日付の文字列を取得する.
			String msg00 = "";
			String msg01 = "";
			String msg02 = "";
			String msg03 = "";
			String msg04 = "";
			String msg05 = "";
			String msg06 = "";
			get_string( ref msg00, dtm_dst00 ); // 1年後の文字列を取得する.
			get_string( ref msg01, dtm_dst01 ); // 1月後の文字列を取得する.
			get_string( ref msg02, dtm_dst02 ); // 1日後の文字列を取得する.
			get_string( ref msg03, dtm_dst03 ); // 1時間後の文字列を取得する.
			get_string( ref msg04, dtm_dst04 ); // 1分後の文字列を取得する.
			get_string( ref msg05, dtm_dst05 ); // 1秒後の文字列を取得する.
			get_string( ref msg06, dtm_dst06 ); // 1ミリ秒後の文字列を取得する.

			StringBuilder sb0 = new StringBuilder();
			sb0.AppendLine( msg00 );
			sb0.AppendLine( msg01 );
			sb0.AppendLine( msg02 );
			sb0.AppendLine( msg03 );
			sb0.AppendLine( msg04 );
			sb0.AppendLine( msg05 );
			sb0.AppendLine( msg06 );
			String msg0 = sb0.ToString().Trim();

			// ------------------------------------------------
			// 過去の日付の文字列を取得する.
			String msg10 = "";
			String msg11 = "";
			String msg12 = "";
			String msg13 = "";
			String msg14 = "";
			String msg15 = "";
			String msg16 = "";
			get_string( ref msg10, dtm_dst10 ); // 1年前の文字列を取得する.
			get_string( ref msg11, dtm_dst11 ); // 1月前の文字列を取得する.
			get_string( ref msg12, dtm_dst12 ); // 1日前の文字列を取得する.
			get_string( ref msg13, dtm_dst13 ); // 1時間前の文字列を取得する.
			get_string( ref msg14, dtm_dst14 ); // 1分前の文字列を取得する.
			get_string( ref msg15, dtm_dst15 ); // 1秒前の文字列を取得する.
			get_string( ref msg16, dtm_dst16 ); // 1ミリ秒前の文字列を取得する.

			StringBuilder sb1 = new StringBuilder();
			sb1.AppendLine( msg10 );
			sb1.AppendLine( msg11 );
			sb1.AppendLine( msg12 );
			sb1.AppendLine( msg13 );
			sb1.AppendLine( msg14 );
			sb1.AppendLine( msg15 );
			sb1.AppendLine( msg16 );
			String msg1 = sb1.ToString().Trim();

			// ------------------------------------------------

			// メッセージボックスを表示する.
			String msg_all = String.Format( "{0}\r\n\r\n{1}\r\n\r\n{2}", msg_base, msg0, msg1 );
			MessageBox.Show( msg_all );

		}

	}

}