秒数を「hh:mm:ss」形式に変換するキレイな方法

タグの編集
投稿者 太一  (社会人) 投稿日時 2012/1/16 10:04:02
例えば、秒数70は「00:01:10」という風に時間形式に変換したいと思っています。

70秒→00:01:10


一応作れてはいるのですが、無駄が多いような気がして、もっと簡潔にする方法はないかと思いました質問させて頂きました。


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

Vb2010/windows7




TextBox2.Textに70が入っています。

Dim a As Integer = Int(TextBox2.Text / 60)   '秒から分に変換 余りは切り捨て
Dim b As Integer = TextBox2.Text Mod 60      '秒を計算
Dim c As Integer = Int(a / 60)                  '分から時間に変換 余りは切り捨て
Dim d As Integer = a Mod 60                      '分を計算

TextBox2.Text = c & ":" & d & ":" & b
TextBox2.Text = TimeValue(TextBox2.Text)   '時間形式に変換
投稿者 shu  (社会人) 投稿日時 2012/1/16 10:38:14
        Dim tm As New TimeSpan(0, 0, CInt(TextBox1.Text))
        TextBox2.Text = tm.ToString()

こんなんでどうでしょう?
投稿者 YuO  (社会人) 投稿日時 2012/1/16 11:07:11
Dim span = TimeSpan.FromSeconds(Int32.Parse(TextBox2.Text))
TextBox2.Text = span.ToString()
でしょうか。個人的にはコンストラクタよりFrom系のメソッド使用をお勧めしたいところ。
# From系の方が値の解釈方法がわかりやすいので。

日単位の表示をしたくないのであれば,
TextBox2.Text = String.Format("{0}:{1:mm\:ss}", span.Days * 24 + span.Hours, span)
と,その部分は自分で書く必要があります。

References)
MSDN: FromSeconds メソッド
http://msdn.microsoft.com/ja-jp/library/system.timespan.fromseconds.aspx
MSDN: ToString メソッド (String)
http://msdn.microsoft.com/ja-jp/library/dd992632.aspx
MSDN: 標準の時間間隔書式指定文字列
http://msdn.microsoft.com/ja-jp/library/ee372286.aspx
MSDN: カスタム時間間隔書式指定文字列
http://msdn.microsoft.com/ja-jp/library/ee372287.aspx
投稿者 太一  (社会人) 投稿日時 2012/1/17 10:09:00
shuさん、YuOさん、有り難うございます。

お二人とも綺麗なコードですね。

6行だったコードが、たった2行になってしまうのですね・・・

まだまだ勉強が必要ですね。