| 魔界の仮面弁士様
ご回答、誠にありがとうございます。
仕様を記載せず、申し訳ありませんでした。
仕様として、00:00〜24:00までの期間での時間数を算出するため、「深夜22時から明朝5時まで」のケースだと例えるなら
8月1日 22:00〜24:00
8月2日 00:00〜05:00
という2回に分けて算出します。
どうやら、24:00というのが日付型として認識されないようなので、00:00と入力された場合は23:59として
何分経過したかを算出後に1分だけを数値型にして加算する方法で下記のコードを組んでみました。
'開始時間と終了時間の値を取得
Dim starttime1, endtime1 As DateTime
Dim timeflag As Integer '終了時刻を00:00と入力した場合の判定フラグ
starttime1 = txtStartHour1.Text.ToString() & ":" & txtStartMinutes1.Text.ToString()
endtime1 = txtEndHour1.Text.ToString() & ":" & txtEndMinutes1.Text.ToString()
'24:00は日付型として認識されないため、23:59とし、
'酸素量の計算時にトータル分数に1を足すこととする。
If endtime1 = "00:00" Then
endtime1 = "23:59"
timeflag = 1
Else
timeflag = 0
End If
'終了時間と開始時間の差を計算
Dim jikan As TimeSpan
jikan = endtime1.Subtract(starttime1)
'時刻の差がマイナスの値の場合
If jikan.TotalMinutes < 0 Then
MsgBox("終了時間が開始時間より過去になっています。" & vbCrLf & "時刻の修正をしてください。", vbCritical)
txtStartHour1.Focus()
Else
'分に変換した時間と流量の積を算出
Dim total As Integer
If timeflag = 0 Then
'終了時間が00:00以外であった場合の計算方法
total = Int(jikan.TotalMinutes) * Int(txtRyuryo1.Text)
Else
'終了時間が00:00であった場合の計算方法
total = Int(jikan.TotalMinutes) + 1
total = total * Int(txtRyuryo1.Text)
End If
txtTotal1.Text = total
End If
この考え方より良い方法があればご教示をお願いいたします。
Timespanを活用すればもっと良い方法がありそうな気がしますが、全く思いつきません・・・
|