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

在大多数情况下,它有效(应该)。但我的问题是 如果 $old_date = 0,则返回今天的日期[clock format [clock scan $old_date] -format {%d %b}]

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

问题是你正在做(实际上)[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]

相关内容

  • 没有找到相关文章

最新更新