C# 日時の差分を求めるサンプル

C#の日時の差分を求めるサンプルです。

目次

サンプル 日の差分を求める
  時間・分・秒の差分を求める
時分で差分を求める(年月日なし)
  月の差分を求める

日の差分を求める

public struct TimeSpan
  public int Days { get; }
  public double TotalDays { get; }

日の差分を求めるサンプルです。

using System;
class Test1
{
	static void Main()
	{
		// 指定日時をセット 2020/1/2 10:00:00
		DateTime dt1 = new DateTime(2020, 1, 2, 10, 0, 0);

		// 指定日時をセット 2019/12/31
		DateTime dt2 = new DateTime(2019, 12, 31, 0, 0, 0);

		// 引き算
		TimeSpan ts1 = dt1 - dt2;

		Console.WriteLine(ts1.Days); // 2
		Console.WriteLine(ts1.TotalDays); // 2.41666666666667

		// 日時を文字列でセット
		DateTime dt3 = Convert.ToDateTime("2020/01/02 10:00:00");
		DateTime dt4 = Convert.ToDateTime("2019/12/31 00:00:00");

		// 引き算
		TimeSpan ts2 = dt3 - dt4;

		Console.WriteLine(ts2.Days); // 2
		Console.WriteLine(ts2.TotalDays); // 2.41666666666667
	}
}

7,10行目は、指定日時に数値を指定しています。
19,20行目は、日時の文字列をDateTime型に変換しています。

引き算の結果の日の差分はTimeSpanのDaysプロパティで取得します。
Daysは、時分秒を含まず計算します。
TotalDaysは、時分秒を含んで計算します。

 

時間・分・秒の差分を求める

public struct TimeSpan
  public int TotalHours { get; }
  public double TotalMinutes { get; }
  public double TotalSeconds { get; }

時間・分・秒の差分を求めるサンプルです。

using System;
class Test1
{
	static void Main()
	{
		// 指定日時をセット 2020/1/3 10:00:00
		DateTime dt1 = new DateTime(2020, 1, 3, 10, 0, 0);

		// 指定日時をセット 2019/1/1 10:00:00
		DateTime dt2 = new DateTime(2020, 1, 1, 10, 0, 0);

		// 引き算
		TimeSpan ts1 = dt1 - dt2;

		Console.WriteLine(ts1.TotalHours); //48 (時間)
		Console.WriteLine(ts1.TotalMinutes); //2880 (分)
		Console.WriteLine(ts1.TotalSeconds); //172800 (秒)

		// 日時を文字列でセット
		DateTime dt3 = Convert.ToDateTime("2020/01/03 10:00:00");
		DateTime dt4 = Convert.ToDateTime("2020/01/01 10:00:00");

		// 引き算
		TimeSpan ts2 = dt3 - dt4;

		Console.WriteLine(ts2.TotalHours); //48 (時間)
		Console.WriteLine(ts2.TotalMinutes); //2880 (分)
		Console.WriteLine(ts2.TotalSeconds); //172800 (秒)
	}
}

7,10行目は、指定日時に数値を指定しています。
20,21行目は、日時の文字列をDateTime型に変換しています。

引き算の結果の時間の差分はTimeSpanのTotalHours,TotalMinutes,TotalSecondsプロパティで取得します。

 

時分で差分を求める(年月日なし)

using System;
class Test1
{
	static void Main()
	{
		TimeSpan ts1 = TimeSpan.Parse("9:00");
		TimeSpan ts2 = TimeSpan.Parse("18:30");

		TimeSpan ts3 = ts2 - ts1;

		Console.WriteLine(ts3.TotalHours); // 9.5 (時間)
		Console.WriteLine(ts3.TotalMinutes); // 570 (分)
		Console.WriteLine(ts2.TotalSeconds); // 66600 (秒)
	}
}

6,7行目は、時間の文字列をTimeSpan型に変換しています。

 

月の差分を求める

月の差分についてはTotalHoursのようなプロパティはないので計算します。

using System;
class Test1
{
	static void Main()
	{
		// 指定日時をセット 2019/10/01
		DateTime dt1 = new DateTime(2019, 10, 1, 0, 0, 0);

		// 指定日時をセット 2020/01/01
		DateTime dt2 = new DateTime(2020, 1, 1, 0, 0, 0);

		// 引き算
		int ts1 = dt2.Month - dt1.Month + (12 * (dt2.Year - dt1.Year));

		Console.WriteLine(ts1); // 3

		// 日時を文字列でセット
		DateTime dt3 = Convert.ToDateTime("2019/10/01 00:00:00");
		DateTime dt4 = Convert.ToDateTime("2020/01/01 00:00:00");

		// 引き算
		int ts2 = dt4.Month - dt3.Month + (12 * (dt4.Year - dt3.Year));

		Console.WriteLine(ts2); // 3
	}
}

13行目は、月と年を計算しています。計算式に日は入っていません。

関連の記事

C# 現在日時の取得と表示形式のサンプル
C# 日時を計算するサンプル(加算と減算)

△上に戻る