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