1/100秒単位を時間に変換する方法
投稿者 るきお  (社会人)
投稿日時
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を使う)を使っていない点
このように簡潔に書くことができます。(ちょっと形式は変わってしまいますけれども)
時・分・秒を個別に把握したいのであれば、次のように書くこともできます。
これで計算してみたら、太一さんの結果と同じになりました。
173238→0:28:52.380
172119→0:28:41.190
10ミリ秒単位で考えると、
173238→1732.38秒→28分52.38秒
になります。
Webの方はプログラムが間違っているのではないかと思います。
丸めがらみの間違いかなとは思いますが、どう間違っているかまでは推理するのが難しいですね…。
なお質問とは関係ありませんが、太一さんのプログラムは一般的には推奨されない以下4点があります。
1.必要ないのにObject型を使用している点
2.メソッド名(TimeFormat)を変数のように使っている点
3.Returnで戻り値を返していない点
4.せっかく世用意されている.NET Frameworkの機能(時間間隔の計算はTimeSpanを使う)を使っていない点
このように簡潔に書くことができます。(ちょっと形式は変わってしまいますけれども)
Public Function TimeFormat(value As Long) As String
'100ナノ秒単位にそろえる。ミリ→マイクロ→ナノ
Dim span As New TimeSpan(value * 10 * 1000 * 10)
Return span.ToString
End Function
時・分・秒を個別に把握したいのであれば、次のように書くこともできます。
Public Function TimeFormat3(value As Long) As 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秒は扱えないと勝手に思っていました。
助かりました。
有難うございます。
TimeSpanでしたか。
1/100秒は扱えないと勝手に思っていました。
助かりました。
有難うございます。
投稿者 太一  (社会人)
投稿日時
2012/1/17 10:10:37
すみません、「解決」にチェックが入っていませんでした。
るきおさん、有り難うございました。
るきおさん、有り難うございました。
そこで、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