tcl时钟函数操作

时间:2012-04-15 23:51:35

标签: 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_date0会返回今天的日期。

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

1 个答案:

答案 0 :(得分:4)

问题是你正在做(实际上)[clock scan 0]。如果所有其他方法都失败,clock scan命令将回退到尝试解析您扔进去的任何内容。使用0时,最终决定它在当前日期引用00:00:00。我不知道这是否是对该字符串的正确解析,但它可以说是没错:它是一个真正可怕的非规范化时间。

在<{1}}中保留时间戳是有意义的。那就是old_date返回的那种价值。由于您正在寻找日期级别的粒度,因此我们选择当天的标准时间来表示当天(中午,GMT)。现在,我们可以使用clock scan-base选项使我们的转换代码中的所有内容都工作(为方便起见,将其放入一个小程序中):

-gmt

鉴于此,我们现在可以重写其余代码:

proc dateStamp {date} {
    clock scan "12:00:00" -base [clock scan $date -gmt 1] -gmt 1
}