2

時間を秒単位でHH:MM:SS.mmフォーマットに変換する必要があります。秒入力は組み込みデバイスから読み取られており、doubleの形式ですseconds.millseconds。次の変換コードを試しましたが、失敗します。

set cpu_time [function_that_fetches_the_time]
puts "[clock format $cpu_time -format {%H:%M:%S}]"

これはエラーで失敗します

expected integer but got "98.92"

からスロー

"ParseFormatArgs {*}$args"
    (procedure "::tcl::clock::format" line 6)

doubleを整数に変換すると、上記は機能しますが、出力表示にミリ秒の部分も含まれていると便利です。

また、ミリ秒のクロック形式指定子は何ですか?

編集:

に変換するだけdoubleでもint機能しないようです。私は試した

puts "[clock format [expr int($cpu_time)] -format {%H:%M:%S}]"

そしてそれは奇妙な時間をもたらします。たとえば、組み込みデバイスが戻ったとき3.53(そして私がそれをにキャストした3とき)、出力される時間は17:00:03です。

4

4 に答える 4

6

確実に機能する間隔をフォーマットする最も簡単な方法は、すべてを手作業で行うことです。

set cpu_time [function_that_fetches_the_time]
set cpu_ms   [expr { int(fmod($cpu_time, 1.0) * 1000) }]
set cpu_secs [expr { int(floor($cpu_time)) % 60 }]
set cpu_hrs  [expr { int(floor($cpu_time / 3600)) }]
set cpu_mins [expr { int(floor($cpu_time / 60)) % 60 }]
puts [format "%d:%02d:%02d.%3d" $cpu_hrs $cpu_mins $cpu_secs $cpu_ms]

おそらくこれを手順でまとめたいと思うでしょう…</p>

于 2013-01-18T23:25:18.350 に答える
3

あなたの編集に関して、それがそのように表示されている理由(17:00:03)は、クロック形式がエポックから整数秒数を期待しているためです。それで、あなたはUTCから5つのタイムゾーン離れていると思いますか?これは、「3」を1970年1月1日の深夜3秒を過ぎたものとして解釈し、ローカルタイムゾーンに調整します。(実際の日付/時刻をフォーマットされた文字列に変換するのではなく)秒をフォーマットに変換するだけの場合は、Donalの答えが最適です。編集したソリューションに-gmt引数を追加すると、期待される00:00:03が得られます(その後、結果に「.53」ミリ秒を文字列で追加してミリ秒を含めることができます。

于 2013-01-18T23:30:45.227 に答える
0

ミリ秒の指定子は単一の小さいsです

[clock format [clock seconds] -format "%H:%M:%S:%s"]を試してください

このリンクを参照してください

于 2013-01-18T22:26:56.047 に答える
0

これが私がドナル・フェローの答えをどのように修正したかです、これは私のためにしたので、これはいくつかのために少し良く働くかもしれません。

proc time_cmd {cmd} {
    set start [clock milliseconds]
    eval $cmd
    set end [clock milliseconds]
    set runtime [expr $end - $start]
    set seconds [expr $runtime / 1000]
    set cpu_ms [expr $runtime % 1000]    
    set cpu_secs [expr { int(floor($seconds)) % 60 }]
    set cpu_mins [expr { int(floor($seconds / 60)) % 60 }]
    set cpu_hrs  [expr { int(floor($seconds / 3600)) }]
    puts [format "Command completed in %d:%02d:%02d.%-03d" $cpu_hrs $cpu_mins $cpu_secs $cpu_ms]
}
于 2020-08-08T05:17:11.853 に答える