2012-04-15 12 views
0

私はジレンマのビットで午前ここTCL時計機能を扱うTCL時計機能操作

ここでは私のコードです。 しかし、私の問題は [clock format [clock scan $old_date] -format {%d %b}]今日の日付を返す場合$old_date = 0です。

おそらく正しい値が返されていることはわかっていますが、値がゼロの場合は今日の日付を返したくありません。それは私の比較ロジックを混乱させる。私はおそらくif条件を確認することができますが、 私は時計機能で何かできますか?

+0

if文で '(||)/'と '(&&)を使用するだけではどうですか?すなわち、 $ old_dateが0(または何らかのテストの場合)または/と私のクロック比較が等しくない場合、このブロックに入る... –

答えて

4

問題はあなたが(実際に)[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]