Tcl 时钟函数操作

Tcl 时钟函数操作,tcl,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 o

在处理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
返回今天的日期

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

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

旧日期中保留时间戳是有意义的;这是
时钟扫描
返回的值。既然您正在寻找日期级别的粒度,那么让我们选择一天中的标准时间来表示该天(中午,格林尼治标准时间)。现在,我们可以使用
-base
-gmt
选项使转换代码中的所有内容都正常工作(为方便起见,将其放入一个小程序中):

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

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]

问题是您正在执行(实际上)
[时钟扫描0]
。如果所有其他操作都失败,则
时钟扫描
命令将返回到尝试解析您放入其中的任何内容。使用
0
,它最终决定它引用当前日期的
00:00:00
。我不知道这是否是对该字符串的正确解析,但可以说它没有错:这是一个真正可怕的非规范化时间

旧日期中保留时间戳是有意义的;这是
时钟扫描
返回的值。既然您正在寻找日期级别的粒度,那么让我们选择一天中的标准时间来表示该天(中午,格林尼治标准时间)。现在,我们可以使用
-base
-gmt
选项使转换代码中的所有内容都正常工作(为方便起见,将其放入一个小程序中):

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

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]
为什么不在if语句中使用'or'(| |)/'和'(&&&&')?例如,如果$old|u date为0(或任何测试)或/且我的时钟比较不相等,则输入此块…为什么不在If语句中使用'or'(| |)/'和'(&&&&')?例如,如果$old_date为0(或任何测试)或/和我的时钟比较不相等,则输入此块。。。