VB.NETの日時の差分を求めるサンプルです。
目次
| サンプル | 日の差分を求める |
| 時間・分・秒の差分を求める | |
| 月の差分を求める |
日の差分を求める
| Public Structure TimeSpan Public ReadOnly Property Days As Integer Public ReadOnly Property TotalDays As Double |
日の差分を求めるサンプルです。
Module Module1
Sub Main()
' 指定日時をセット 2020/1/2 10:00:00
Dim dt1 As New DateTime(2020, 1, 2, 10, 0, 0)
' 指定日時をセット 2019/12/31
Dim dt2 As New DateTime(2019, 12, 31, 0, 0, 0)
' 引き算
Dim ts1 As New TimeSpan
ts1 = dt1 - dt2
Console.WriteLine(ts1.Days) '2
Console.WriteLine(ts1.TotalDays) '2.41666666666667
' 日時を文字列でセット
Dim dt3 As New DateTime
dt3 = Convert.ToDateTime("2020/01/02 10:00:00")
Dim dt4 As New DateTime
dt4 = Convert.ToDateTime("2019/12/31 00:00:00")
' 引き算
Dim ts2 As New TimeSpan
ts2 = dt3 - dt4
Console.WriteLine(ts2.Days) '2
Console.WriteLine(ts2.TotalDays) '2.41666666666667
End Sub
End Module
4,7行目は、指定日時に数値を指定しています。
18,21行目は、日時の文字列をDateTime型に変換しています。
引き算の結果の日の差分はTimeSpanのDaysプロパティで取得します。
Daysは、時分秒を含まず計算します。
TotalDaysは、時分秒を含んで計算します。
時間・分・秒の差分を求める
| Public Structure TimeSpan Public ReadOnly Property TotalHours As Double Public ReadOnly Property TotalMinutes As Double Public ReadOnly Property TotalSeconds As Double |
時間・分・秒の差分を求めるサンプルです。
Module Module1
Sub Main()
' 指定日時をセット 2020/1/3 10:00:00
Dim dt1 As New DateTime(2020, 1, 3, 10, 0, 0)
' 指定日時をセット 2019/1/1 10:00:00
Dim dt2 As New DateTime(2020, 1, 1, 10, 0, 0)
' 引き算
Dim ts1 As New TimeSpan
ts1 = dt1 - dt2
Console.WriteLine(ts1.TotalHours) '48 (時間)
Console.WriteLine(ts1.TotalMinutes) '2880 (分)
Console.WriteLine(ts1.TotalSeconds) '172800 (秒)
' 日時を文字列でセット
Dim dt3 As New DateTime
dt3 = Convert.ToDateTime("2020/01/03 10:00:00")
Dim dt4 As New DateTime
dt4 = Convert.ToDateTime("2020/01/01 10:00:00")
' 引き算
Dim ts2 As New TimeSpan
ts2 = dt3 - dt4
Console.WriteLine(ts2.TotalHours) '48 (時間)
Console.WriteLine(ts2.TotalMinutes) '2880 (分)
Console.WriteLine(ts2.TotalSeconds) '172800 (秒)
End Sub
End Module
DateTimeのコンストラクタの引数に年月日時分秒を指定して引き算します。
引き算の結果の時間の差分はTimeSpanのTotalHours,TotalMinutes,TotalSecondsプロパティで取得します。
月の差分を求める
月の差分についてはTotalHoursのようなプロパティはないので計算します。
Module Module1
Sub Main()
' 指定日時をセット 2019/10/01
Dim dt1 As New DateTime(2019, 10, 1, 0, 0, 0)
' 指定日時をセット 2020/01/01
Dim dt2 As New DateTime(2020, 1, 1, 0, 0, 0)
' 引き算
Dim ts1 As Integer
ts1 = dt2.Month - dt1.Month + (12 * (dt2.Year - dt1.Year))
Console.WriteLine(ts1) '3
' 日時を文字列でセット
Dim dt3 As New DateTime
dt3 = Convert.ToDateTime("2019/10/01 00:00:00")
Dim dt4 As New DateTime
dt4 = Convert.ToDateTime("2020/01/01 00:00:00")
' 引き算
Dim ts2 As New Integer
ts2 = dt4.Month - dt3.Month + (12 * (dt4.Year - dt3.Year))
Console.WriteLine(ts1) '3
End Sub
End Module
12行目は、月と年を計算しています。計算式に日は入っていません。
関連の記事
