TCL时钟命令

时间:2012-06-15 05:18:13

标签: tcl

下面显示的时钟操作在具有TCL 8.5的Linux机器中运行良好。但是当我在具有TCL8.4的SunOS上使用相同的内容时,我收到错误“bad switch”-format“:必须是-base或-gmt”。

出于某种原因,我无法在SunOS中将我的TCL 8.4升级到8.5。

任何人都可以请求帮助,我怎样才能使它在TCL 8.4中工作??????

下面给出了命令,我试图通过这些命令实现的目的是将系统日期提前一天。

$ today包含值“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 个答案:

答案 0 :(得分: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秒......)

答案 1 :(得分: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版本中不推荐使用此功能。