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}]返回今天的日期 if $old_date= 0

我知道它可能返回正确的值,但如果值为零,我不希望它返回今天的日期。这有点搞乱我的比较逻辑。我可能可以检查 if 条件但是我可以用时钟功能做些什么吗?

4

1 回答 1

4

问题是你正在做(实际上)[clock scan 0]。如果所有其他方法都失败,该clock scan命令将回退到尝试解析您投入其中的任何内容。使用 a 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]
于 2012-04-16T07:09:40.223 回答