数字を時刻に変換するには

解決


うい  2006-10-04 08:57:05  No: 133525

環境はVisual Basic6 WindowsXP Home Edtionです。

テキストボックスに入力された数字を00:00:00形式で表示したいと
思っています。
12と入力された場合、12:00:00と変換しようと思ってます。
Format関数だと000012となって右によってしまうので、
Function Henkan(ByVal str As String) As String
  
    Dim i As Integer
    
    i = Len(str)
    
    While (0 < (6 - i))
      
        i = i + 1
    
        str = str & "0"
    
    Wend

      (略)
    Henkan = str
End Function

と関数を作っています、


うい  2006-10-04 08:59:26  No: 133526

途中で送信ボタンをおしてしまいました。
(略)の部分ではMid()を使って、:をいれています。

こういった関数を自作しないといけないものなんでしょうか。
よろしくお願いします。


Blue  2006-10-04 09:09:04  No: 133527

一度Date型変数に入れてからFormat関数を使うのはダメでしょうか?

    Dim i As Integer
    Dim d As Date
    
    i = 12
    d = DateAdd("h", i, d)
    MsgBox Format$(d, "hh:nn:ss")


ガッ  2006-10-04 09:15:36  No: 133528

つ TimeSerial

ただ日付型と文字列型は違うので、単純に文字列として扱いたいなら
> テキストボックスに入力された数字を00:00:00形式で表示したい
なら単純に
dim i as long
i=clng(Text1.Text) mod 24
msgbox format$(i,"00") & ":00:00"
などのようにすればいいのではないかと


そがっち  2006-10-05 04:39:44  No: 133529

見た感じ、「1〜6文字(桁)の数字を入力させて時間表示にする」という感じでしょうか?
少なくとも、例えば「12」と入力された時に、それが12時なのか12分なのか、はたまた
1時2分なのか、VB側で勝手に判断するのは不可能なので、単純に1関数でパッと変換するのは
基本的に無理です。
入力方法が固定されていて、例えば時間2桁しか入力されないとかなら、単純に文字列連結で
大丈夫かもしれませんが……

面倒だったので多少泥臭い感じのソースですが(汗)、複数の入力パターンが可能なものを
簡単に作ってみましたので、参考にしてみて下さい。私ならこんな感じにします。
このソースが想定しているパターンでは、時のみの場合は1桁でもOKですが、時分、または
時分秒の場合は必ず、時・分・秒を2桁ずつ入力しなければいけません。
  ex.12時5分なら「1205」
でも、こういう制約がないと、普通は判断不可能だと思いますので……

Private Function Henkan(ByVal str As String) As String

    Dim tmpTime As String

'とりあえず戻り値初期化
    Henkan = ""

'1〜2文字の場合は時、4文字は時分、6文字は秒、それ以外は認めない
'時間としての妥当性チェックを後で行うので、Henkanには直接代入しない
    Select Case Len(str)
        Case 1
            tmpTime = "0" & str & ":00:00"
        Case 2
            tmpTime = str & ":00:00"
        Case 4
            tmpTime = Left(str, 2) & ":" & Right(str, 2) & ":00"
        Case 6
            tmpTime = Left(str, 2) & ":" & Mid(str, 3, 2) & ":" & Right(str, 2)
        Case Else
            MsgBox "入力エラー"
            Exit Function
    End Select

'妥当性チェック
    If Not IsDate(tmpTime) Then
        MsgBox "入力エラー"
        Exit Function
    End If
    
    Henkan = tmpTime

End Function


そがっち  2006-10-05 04:48:21  No: 133530

あう、細かいですがコメント部分を間違えました。
×  6文字は秒
○  6文字は時分秒
……です。失礼しました。


大吉末吉  2006-10-05 04:49:54  No: 133531

うい  さん  こんにちは。

単純(?)な右詰めで良いなら、

> Replace(Format("12", "!@@\:@@\:@@"), " ", "0")

と言う方法もありますね。


大吉末吉  2006-10-05 04:51:01  No: 133532

あう・・・間違えた。

「右詰」じゃなくて、「左詰」でした。


LESIA  2006-10-06 17:49:52  No: 133533

テキストボックスに入力するのが、時で、分と秒は0なら、
Format(TimeSerial(Text1.Text, 0, 0), "hh:mm:ss")
で、いいかと。


うい  2006-10-23 09:25:18  No: 133534

PCが故障していたためレスするのが遅くなってしまいました。
自分なりに書いてみました。
12   → 12:00:00
1212 → 12:12:00 
1299 → 12:99:00
となるようなソースを書こうとしてましてました。   
 
    Dim str As String
    str = "12"
    MsgBox Left$(Format$(str & "000000", "@@\:@@\:@@"), 8)


通ってみた  2006-10-25 03:25:03  No: 133535

>1299 → 12:99:00

存在しない時間でもいいの?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加