我在处理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条件但是 我能用时钟功能做些什么吗?
答案 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
}