2012-04-15 61 views
0

我是有點兩難這裏處理TCL時鐘功能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_date = 0返回今天的日期。

我知道它可能會返回正確的值,但如果值爲零,我不希望它返回今天的日期。它有點混亂我的比較邏輯。我可以檢查一個條件,但 有什麼我可以做的時鐘功能?

+0

爲什麼不在if語句中使用'或'(||)/'和'(&&)?即。如果$ old_date是0(或任何測試)或/和我的時鐘比較不相等,然後輸入此塊... – 2012-04-16 01:48:57

回答

4

問題是你在做(實際上)[clock scan 0]。如果一切都失敗了,那麼clock scan命令將回退到試圖分析你拋入它的任何東西。對於0,它最終決定它是指當前日期的00:00:00。我不知道這是否是對該字符串的正確解析,但它可以說沒有錯:它是一個真正可怕的非規範化時間。

什麼是有意義的是保持時間戳old_date;這是clock scan返回的那種價值。由於您在尋找日期級粒度,我們選擇一天的標準時間來表示當天(中午,格林威治標準時間)。現在,我們可以使用-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]