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行目は、月と年を計算しています。計算式に日は入っていません。
関連の記事