トップ回答者
時間の計算について

質問
-
時間の計算でよくわからないエラーがでて困ってしまいました。
いったい何故エラーなんでしょう。
以下の2文はエラーがでない。(正常に処理できます。)
Me.txtOperatedTime.Text = Convert.ToString(Convert.ToDateTime("24:00:00") + Convert.ToDateTime(Me.txtEndTime.Text))
Me.txtOperatedTime.Text = Convert.ToString(Convert.ToDateTime(Me.txtOperatedTime.Text) - Convert.ToDateTime(Me.txtStartTime.Text))この文がエラーになります。
Me.txtOperatedTime.Text = Convert.ToString(Convert.ToDateTime("24:00:00") + Convert.ToDateTime(Me.txtEndTime.Text) - Convert.ToDateTime(Me.txtStartTime.Text))
演算子 '-' は、型 'String' および 'Date' に対して定義されていません。とエラーメッセージがでています。
日付・時間については、3項以上の演算はできないのでしょうか?
回答
すべての返信
-
その後、もう少し試してみて、現象が明確になりました。
a = Convert.ToString(Convert.ToDateTime("06:00:00") + Convert.ToDateTime("02:00:00") + Convert.ToDateTime("02:00:00"))
エラーなし。正常。a = Convert.ToString(Convert.ToDateTime("06:00:00") + Convert.ToDateTime("02:00:00") - Convert.ToDateTime("02:00:00"))
演算子 '-' は、型 'String' および 'Date' に対して定義されていません。のエラー
a = Convert.ToString(Convert.ToDateTime("06:00:00") - Convert.ToDateTime("02:00:00") + Convert.ToDateTime("02:00:00"))
a = Convert.ToString(Convert.ToDateTime("06:00:00") - Convert.ToDateTime("02:00:00") - Convert.ToDateTime("02:00:00"))
どちらも、これらの引数で呼び出される、アクセス可能な '+' がないため、オーバーロードの解決に失敗しました。
のエラー
でした。何か原因がわかる方教えてください。
-
Walküre さんからの引用 a = Convert.ToString(Convert.ToDateTime("06:00:00") + Convert.ToDateTime("02:00:00") + Convert.ToDateTime("02:00:00"))
エラーなし。正常。エラーなしだからと言って「正常」とは限りません。
意図した通りの結果がaに入っていますか?
何か長い文字列になっていませんか?
Walküre さんからの引用 Me.txtOperatedTime.Text = Convert.ToString(Convert.ToDateTime("24:00:00") + Convert.ToDateTime(Me.txtEndTime.Text) - Convert.ToDateTime(Me.txtStartTime.Text))
演算子 '-' は、型 'String' および 'Date' に対して定義されていません。とエラーメッセージがでています。
日付・時間で演算されていません。
'+'が成功するのは"String + String"とみなせるからです。
'-'は"String - String"も存在しないため、コンパイルできません。
-
コード ブロック
Sub Main()
Dim a = Convert.ToString(Convert.ToDateTime("06:00:00") + Convert.ToDateTime("02:00:00") + Convert.ToDateTime("02:00:00"))
Console.WriteLine(a)Dim src As DateTime = Convert.ToDateTime("06:00:00")
Dim plus1 As New TimeSpan(2, 0, 0)
Dim plus2 As New TimeSpan(2, 0, 0)
Dim result As DateTime = src + plus1 + plus2
Dim b As String = Convert.ToString(result)
Console.WriteLine(b)
End Sub例として挙げれば、この2行の出力の差があることを確認してください。
(VB2008)
-