我在处理 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]