none
時間の計算について RRS feed

  • 質問

  • 時間の計算でよくわからないエラーがでて困ってしまいました。

    いったい何故エラーなんでしょう。

     

    以下の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項以上の演算はできないのでしょうか?

     

     

     

    2008年1月20日 14:28

回答

  •  Walküre さんからの引用

    うまくいくのは、2項目の-のみですか?

    ?Convert.ToString(convert.ToDateTime("06:00:00") - Convert.ToDateTime("02:00:00"))
    "04:00:00"

    手元で試す限り、そのようです。

    恐らくは型の判定順序とかがあるのだと思います。(ドキュメント等で裏付けが取れるものだとは思います)

     

    基本的に、DateTime型で演算を行ってはいけません。

    DateTime型への加算・減算はTimeSpan型を使用してください。

    2008年1月20日 16:01
    モデレータ

すべての返信

  • その後、もう少し試してみて、現象が明確になりました。

            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"))
    どちらも、

    これらの引数で呼び出される、アクセス可能な '+' がないため、オーバーロードの解決に失敗しました。

    のエラー

     

    でした。何か原因がわかる方教えてください。

     

    2008年1月20日 14:45
  •  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"も存在しないため、コンパイルできません。

    2008年1月20日 15:08
    モデレータ
  • コード ブロック

    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)

    2008年1月20日 15:18
    モデレータ
  •  

    >エラーなしだからと言って「正常」とは限りません。

    >意図した通りの結果がaに入っていますか?

    >何か長い文字列になっていませんか?

    おっしゃるとおりでした。

    テストをミスってました。

    2項目の+もだめですね。

     

    うまくいくのは、2項目の-のみですか?

    ?Convert.ToString(convert.ToDateTime("06:00:00") - Convert.ToDateTime("02:00:00"))
    "04:00:00"

    2008年1月20日 15:43
  •  Walküre さんからの引用

    うまくいくのは、2項目の-のみですか?

    ?Convert.ToString(convert.ToDateTime("06:00:00") - Convert.ToDateTime("02:00:00"))
    "04:00:00"

    手元で試す限り、そのようです。

    恐らくは型の判定順序とかがあるのだと思います。(ドキュメント等で裏付けが取れるものだとは思います)

     

    基本的に、DateTime型で演算を行ってはいけません。

    DateTime型への加算・減算はTimeSpan型を使用してください。

    2008年1月20日 16:01
    モデレータ
  • >基本的に、DateTime型で演算を行ってはいけません。

    >DateTime型への加算・減算はTimeSpan型を使用してください。

     

    そのようですね。

     

    >恐らくは型の判定順序とかがあるのだと思います。(ドキュメント等で裏付けが取れるものだとは思います)

    う~ん、ドキュメント探すところを間違えているのかな?

    とりあえず、原因がわかったので、ま、気長に探してみます。

     

    どうもありがとうございました。

     

    2008年1月20日 16:21