2012-06-15 214 views
1

在下面示出时钟操作工作良好的Linux机器具有TCL 8.5。但是,当我在具有TCL8.4的SunOS上使用相同的命令时,出现错误“bad switch”-format“:must be -base or -gmt”。TCL clock命令

出于某种原因,我不能到我的TCL 8.4升级到8.5,而SunOS。

任何人都可以请大家帮忙,我怎样才能使它在TCL 8.4工作,以及?????

的命令是下面给出我试图通过这些命令来实现是多一天推进系统日期。

$今天包含值 “2012 06 15 14 39 20”

set today [clock scan $today -format "%Y %m %d %H %M %S"]  
set tomorrow [clock add $today 86600 seconds] 
set victim [clock format $tomorrow -format "%a"] 
set tomorrow [clock format $tomorrow -format "%m%d%H%M"] 
send "sudo date $tomorrow\r" 

感谢

回答

2

正如你所发现的Tcl 8.4和8.5之间的时钟命令改变。在8.4中,时钟扫描命令只识别多种标准格式。因此,您需要将您的$ today价值转换为其中一种格式,详情请参阅here

一种可能的方式是

regexp {(\d\d\d\d) (\d\d) (\d\d) (\d\d) (\d\d) (\d\d)} $today all YY MM DD HH mm ss 
set reformatToday "$YY$MM$DD $HH$mm$ss" 
set today [clock scan $reformatToday] 

的Tcl 8.5也将与此自由形式扫描代码工作;但是,此功能在8.4版以后的Tcl版本中不推荐使用。

+0

感谢插孔,我要去尝试。 – suj

5

Jackson's answer是什么问题的核心:8.5添加了很多功能clock和您的代码是依赖于他们。但是,他并没有完全确定获得目标时间的最佳方法。

# Multiple assignment from list 
foreach {YY MM DD HH mm ss} $today break 
# Get the date tomorrow in one funky step 
set tomorrow [clock scan "$YY$MM$DD $HH$mm$ss + 86600 seconds"] 

# Rest is the same as before 
set victim [clock format $tomorrow -format "%a"] 
set tomorrow [clock format $tomorrow -format "%m%d%H%M"] 
send "sudo date $tomorrow\r" 

(你知道那一天是永远86600秒长?这比平均长度长200秒...)

+0

这是foreach命令的一个妙用! – Jackson

+0

@杰克逊是的,但请使用8.5以后的'lassign'。 –

+0

Thx Donal。我会试试这个。顺便说一句,长200秒是有意在第二天增加一些秒。 – suj