ヘッダー
C# サンプル集
 

日付のひき算

2020/7/19

→ Visual Basic のサンプルに切り替える

 

何日経過したかを求める

DateTime date1 = new DateTime(2025, 1, 12);
DateTime date2 = new DateTime(2024, 12, 25);

int result = (date1 - date2).Days;
System.Diagnostics.Debug.WriteLine(result); // 18 と表示されます。

Debug.WriteLineが表示される場所

 

 

60日と8時間50分23秒前 を求める 

DateTime sourceDate = new DateTime(2024, 8, 20);
TimeSpan span = new TimeSpan(60, 8, 50, 23); //60日と8時間50分23秒を表す期間
DateTime result = sourceDate - span;

System.Diagnostics.Debug.WriteLine(result.ToString(@"yyyy\/MM\/dd HH\:mm\:ss")); // 2024/06/20 15:09:37 と表示されます。

Debug.WriteLineが表示される場所

 

 

14日前の日付を求める

DateTime sourceDate = new DateTime(2025, 1, 12);
DateTime result = sourceDate.AddDays(-14);

System.Diagnostics.Debug.WriteLine(result.ToString(@"yyyy\/MM\/dd")); // 2024/12/29 と表示されます。

Debug.WriteLineが表示される場所

 

 

14ヶ月前の日付を求める

DateTime sourceDate = new DateTime(2025, 1, 12);
DateTime result = sourceDate.AddMonths(-14);

System.Diagnostics.Debug.WriteLine(result.ToString(@"yyyy\/MM\/dd")); // 2023/11/12 と表示されます。

Debug.WriteLineが表示される場所

 

次の例は 2025/3/31 の1ヶ月前の日付を求めます。

2月には31日がないので結果は28日になる点がポイントです。

DateTime sourceDate = new DateTime(2025, 3, 31);
DateTime result = sourceDate.AddMonths(-1);

System.Diagnostics.Debug.WriteLine(result.ToString(@"yyyy\/MM\/dd")); // 2025/02/28 と表示されます。

Debug.WriteLineが表示される場所

 

14年前の日付を求める

DateTime sourceDate = new DateTime(2025, 1, 12);
DateTime result = sourceDate.AddYears(-14);

System.Diagnostics.Debug.WriteLine(result.ToString(@"yyyy\/MM\/dd")); // 2011/11/12 と表示されます。

Debug.WriteLineが表示される場所

メモ:紀元前は表現できません。ArgumentOutOfRangeException が発生します。

 

次の例は 2024/2/29 の1年前の日付を求めます。

2023年の2月には29日がないので結果は28日になる点がポイントです。

DateTime sourceDate = new DateTime(2024, 2, 29);
DateTime result = sourceDate.AddYears(-1);

System.Diagnostics.Debug.WriteLine(result.ToString(@"yyyy\/MM\/dd")); // 2023/02/28 と表示されます。

Debug.WriteLineが表示される場所

 

 

何ヶ月経過したかを求める

DateTime date1 = new DateTime(2025, 1, 12);
DateTime date2 = new DateTime(2016, 6, 27);

int month = 0;
while(date2.AddMonths(month + 1) < date1)
{
    month++;
}

System.Diagnostics.Debug.WriteLine(month); // 102 と表示されます。

Debug.WriteLineが表示される場所

 

 

何年経過したかを求める

DateTime date1 = new DateTime(2025, 1, 12);
DateTime date2 = new DateTime(2016, 6, 27);

int year = 0;
while(date2.AddYears(year + 1) < date1)
{
    year++;
}

System.Diagnostics.Debug.WriteLine(year); // 8 と表示されます。

Debug.WriteLineが表示される場所

 

 

聖徳太子が生まれてから何日経ったかを求める

//この聖徳太子の生年月日は日本書紀の暦を機械的に西暦に置き換えたものであり、厳密ではありません。
DateTime taishiBirthday = new DateTime(574, 2, 7);

double totalDays = (DateTime.Now - taishiBirthday).TotalDays;

System.Diagnostics.Debug.WriteLine("聖徳太子が生まれてから " + totalDays.ToString("0") + " 日経過しています。");

Debug.WriteLineが表示される場所

 

 

弥勒が現れるまで後何年かを求める

long shakaDeath = -486; //釈迦が死亡したおおよその年
long mirokuSpan = 5670000000; //釈迦死亡後、弥勒菩薩が現れるまで56億7千万年

long mirokuYear = shakaDeath + mirokuSpan;
long untilMiroku = mirokuYear - DateTime.Now.Year;

System.Diagnostics.Debug.WriteLine("弥勒が現れるまで後 " + untilMiroku + "年です。");

Debug.WriteLineが表示される場所

メモ:太陽系ができたのが約45億年前です。それより長い時間待つ必要があります。