プロが教える店舗&オフィスのセキュリティ対策術

現在、VB6でAPI関数timeGetTimeを使って処理時間を測定する
プログラムを作成しています。

ミリ秒まで取得・表示しているのですが、ミリ秒を含む時間の引き算方法がわかりません。
以下のような引き算を行い、処理開始・終了時間と経過時間を表示させたいです。
例)
15:13:59.054(終了時間)-15:12:57.112(開始時間)
=99:99:99.999(経過時間)

どなたか教えて頂けないでしょうか。
宜しくお願い致します。

A 回答 (4件)

何処が不明なのでしょうか?


通常の引き算だと思いますけど …

時 - 時、分 - 分、秒.ミリ - 秒.ミリ
と言ったパートで計算すれば良いのでは 桁借りが生じるのであればそれなりに計算でしょう
経過時間は 00:01:01.942 となると思います

timeGetTimeで取得した Long型で減算してから時分秒に直してみて方が簡単かも知れませんよ

文字列になってしまっているのであれば Split関数で ":"を区切り文字にして分解して演算でしょう
    • good
    • 0

[イミディエイト]


? XferTimeToLong("15:13:59.054")
54839054
? XferTimeToLong("15:12:57.112")
54777112
? XferLongToTime(54839054)
15:13:59.054
? XferLongToTime(54777112)
15:12:57.112
? XferLongToTime(XferTimeToLong("15:13:59.054")-XferTimeToLong("15:12:57.112"))
00:01:01.942

服飾デザイナでプログラマではありません。
が、一旦、長整数にして計算し、その後に時刻形式に戻したらいいのじゃないかとおもいます。
XferTimeToLong()、XferLongToTime() もDim文を除けば5行程度の関数です。

※ところで、実行結果は間違いありませんか?
    • good
    • 0

どうも間違いはなさそうな・・・。


下記の関数は、あくまでも素人の作成したもの。
世の中には、もっと洗練された書き方もあるかと思います。
質問者は、あくまでも批判的に吟味し自作の関数に挑戦して下さい。

Public Function XferTimeToLong(ByVal Jikan As String) As Long
  Dim H As String
  Dim M As String
  Dim S As String
  Dim T As String
  
  H = CutStr(Jikan, ":", 1)
  M = CutStr(Jikan, ":", 2)
  S = CutStr(CutStr(Jikan, ":", 3), ".", 1)
  T = CutStr(CutStr(Jikan, ":", 3), ".", 2)
  XferTimeToLong = T + S * 1000 + M * 60000 + H * 3600000
End Function

Public Function XferLongToTime(ByVal Jikan As Long) As String
  Dim H As String
  Dim M As String
  Dim S As String
  Dim T As String
  
  H = Jikan \ 3600000
  M = (Jikan - H * 3600000) \ 60000
  S = (Jikan - H * 3600000 - M * 60000) \ 1000
  T = Jikan Mod 1000
  XferLongToTime = Format(H, "00:") & Format(M, "00:") & Format(S, "00.") & Format(T, "000")
End Function

Public Function CutStr(ByVal Text As String, _
            ByVal Separator As String, _
            ByVal N As Integer) As String
  Dim strDatas() As String
  
  strDatas = Split("" & Separator & Text, Separator, , 0)
  CutStr = strDatas(N * Abs((N <= UBound(strDatas))))
End Function
    • good
    • 0

Public Function XferLongToTime(ByVal Jikan As Long) As String


  Dim H As Integer
  Dim M As Integer
  Dim S As Integer
  Dim T As Integer
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!