問題はあなたが(実際に)[clock scan 0]
をやっているということです。 clock scan
コマンドは、他のすべてが失敗した場合は、投げたものを解析しようとします。 0
では、現在の日付で00:00:00
を参照していると判断して終了します。私はこれが正しい文字列の解析であるかどうかはわかりませんが、間違いなく間違っていません。本当にひどく非正規化された時間です。
タイムスタンプをold_date
に保存することは意味があります。それはclock scan
が返す値の種類です。日付単位の細分性を探しているので、その日(昼、GMT)を表すための標準時刻を選択しましょう。今、私たちは(便宜上少し手続きに入れて)私たちの変換コードですべての作業をするために-base
と-gmt
オプションを使用することができますことを考えると
proc dateStamp {date} {
clock scan "12:00:00" -base [clock scan $date -gmt 1] -gmt 1
}
、我々は今、あなたのコードの残りの部分を書き換えることができます。
set old_date 0
if {$old_date != [dateStamp $event_date] && $old_date != 0} {
set myTest($value) [clock format $old_date -format "%d %b"]
#some other stuff
}
set old_date [dateStamp $event_date]
if文で '(||)/'と '(&&)を使用するだけではどうですか?すなわち、 $ old_dateが0(または何らかのテストの場合)または/と私のクロック比較が等しくない場合、このブロックに入る... –