1/100秒単位を時間に変換する方法

タグの編集
投稿者 太一  (社会人) 投稿日時 2012/1/15 08:07:46
WEB上にある、経過時間の1/100秒単位データをローカルで再現したくプログラムを作っています。

そこで、1/100秒の数値を時間に変換するようにしたいのですが、若干誤差が出てきて困っています。



「プログラム」

 Public Function TimeFormat(ByVal T As Object) As String

        TimeFormat = Format(T \ 360000, "0\:")
        T = T Mod 360000
        TimeFormat = TimeFormat & Format(T \ 6000, "00\:")
        T = T Mod 6000
        TimeFormat = TimeFormat & Format(T, "00\.00")
    End Function


「呼び出し」

 TextBox1.Text = TimeFormat(数値)


----------------------------------------------------

173238→WEB(28:51)、作成したプログラム(28:52)


172119→WEB(28:39)、作成したプログラム(28:41)


これは何故このように誤差が出てしまうのでしょうか?


よろしくお願いいたします。




vb2010 /windows7


投稿者 るきお  (社会人) 投稿日時 2012/1/15 13:58:34
太一さんの計算の方が正しいですよね。
10ミリ秒単位で考えると、
173238→1732.38秒→28分52.38秒
になります。

Webの方はプログラムが間違っているのではないかと思います。
丸めがらみの間違いかなとは思いますが、どう間違っているかまでは推理するのが難しいですね…。

なお質問とは関係ありませんが、太一さんのプログラムは一般的には推奨されない以下4点があります。
1.必要ないのにObject型を使用している点
2.メソッド名(TimeFormat)を変数のように使っている点
3.Returnで戻り値を返していない点
4.せっかく世用意されている.NET Frameworkの機能(時間間隔の計算はTimeSpanを使う)を使っていない点

このように簡潔に書くことができます。(ちょっと形式は変わってしまいますけれども)
Public Function TimeFormat(value As LongAs String

    '100ナノ秒単位にそろえる。ミリ→マイクロ→ナノ 
    Dim span As New TimeSpan(value * 10 * 1000 * 10)
    Return span.ToString

End Function


時・分・秒を個別に把握したいのであれば、次のように書くこともできます。
Public Function TimeFormat3(value As LongAs String

    '100ナノ秒単位にそろえる。ミリ→マイクロ→ナノ 
    Dim span As New TimeSpan(value * 10 * 1000 * 10)

    Dim hour As String = span.Hours.ToString
    Dim minute As String = span.Minutes.ToString("00")
    Dim second As String = span.Seconds.ToString("00")
    Dim millisecond As String = span.Milliseconds.ToString

    Return hour & ":" & minute & ":" & second & "." & millisecond

End Function


これで計算してみたら、太一さんの結果と同じになりました。
173238→0:28:52.380
172119→0:28:41.190
投稿者 太一  (社会人) 投稿日時 2012/1/15 15:44:35
るきおさん、返信有難う御座います。

TimeSpanでしたか。

1/100秒は扱えないと勝手に思っていました。

助かりました。
有難うございます。
投稿者 太一  (社会人) 投稿日時 2012/1/17 10:10:37
すみません、「解決」にチェックが入っていませんでした。

るきおさん、有り難うございました。