0

ここで、tcl クロック関数の処理で少しジレンマに陥っています。

これが私のコードです:

set old_date 0

if{ "[clock format [clock scan $old_date] -format {%d %b}] != "[clock format [clock scan $event_date] -format {%d %b}]}
{
    if{$old_date !=0}
    {   
        set myTest($value) $old_date;
        #some other stuff
    }
}
set old_date $event_date

ほとんどの場合、機能します(はずです)。しかし、私の問題は 、 =[clock format [clock scan $old_date] -format {%d %b}]の場合に今日の日付を返すことです。$old_date0

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

4

1 に答える 1

4

問題は、あなたがやっているということです (事実上) [clock scan 0]. コマンドは、他のclock scanすべてが失敗した場合、フォールバックして、スローされたものを解析しようとします。の場合は、現在の日付0を指すと判断してしまいます。00:00:00これがその文字列の正しい解析かどうかはわかりませんが、間違いなく間違いではありません。本当に恐ろしく非正規化された時間です。

タイムスタンプold_date;に保持することは理にかなっています。clock scanそれが返す値の種類です。日付レベルの粒度を探しているので、その日を表す標準時刻 (正午、GMT) を選択しましょう。-baseこれで、 andオプションを使用して-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]
于 2012-04-16T07:09:40.223 に答える