Tcl 时钟命令

Tcl 时钟命令,tcl,Tcl,下面显示的时钟操作在具有TCL 8.5的Linux机器上运行良好。但是,当我在具有TCL8.4的SunOS上使用相同的时,我得到了错误错误的开关格式:must-be-base或-gmt 由于某些原因,我无法在SunOS中将我的TCL 8.4升级到8.5 任何人都可以帮助我,我怎样才能使它在TCL 8.4中也能工作 下面给出了命令,我试图通过这些命令实现的是将系统日期再提前一天 $today包含2012 06 15 14 39 20的值 set today [clock scan $today -

下面显示的时钟操作在具有TCL 8.5的Linux机器上运行良好。但是,当我在具有TCL8.4的SunOS上使用相同的时,我得到了错误错误的开关格式:must-be-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"

感谢您发现时钟命令在Tcl 8.4和8.5之间发生了更改。在8.4中,时钟扫描命令仅识别一些标准格式。因此,您需要将$today值转换为以下格式之一,有关详细信息,请参阅

一种可能的方法是

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版本中,此功能已被弃用。

因为您已经发现时钟命令在Tcl 8.4和8.5之间发生了更改。在8.4中,时钟扫描命令仅识别一些标准格式。因此,您需要将$today值转换为以下格式之一,有关详细信息,请参阅

一种可能的方法是

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版本中,此功能已被弃用。

是问题的核心所在:8.5为时钟添加了许多功能,您的代码依赖于这些功能。然而,他并没有确定获得目标时间的最佳方法

# 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秒…

是问题的核心所在:8.5为时钟添加了许多功能,您的代码依赖于这些功能。然而,他并没有确定获得目标时间的最佳方法

# 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秒…

@Jackson是的,但请从8.5秒开始使用lassign。Thx Donal。我试试这个。顺便说一句,200秒的延长是为了给第二天增加一些额外的时间。@Prakash好的,这比一天长得离奇。:-更重要的是,你还应该意识到夏令时规则意味着并非所有的日子都是24小时。时间和日期的处理非常复杂。是的,多纳尔,它已经够复杂了。。但我现在很幸运,因为我不必太担心夏令时等。。但是不能逃避未来的要求。。。谢谢DonalDonal,只是一个简单的问题。是否可以使用tcl 8.4为时钟增加一些秒数?我知道这在8.5中是可能的,但不确定在8.4中是否可能。另外,当我在8.4中尝试使用'add'和'clock'命令时,我得到了一个错误,当时我只是在clock seconds输出中添加了n秒,就像正常的算术运算一样。在8.4版本中,使用有效的时钟命令是否可行???@Jackson是的,但请从8.5版本开始使用lassign。Thx Donal。我试试这个。顺便说一句,200秒的延长是为了给第二天增加一些额外的时间。@Prakash好的,这比一天长得离奇。:-更重要的是,你还应该意识到夏令时规则意味着并非所有的日子都是24小时。时间和日期的处理非常复杂。是的,多纳尔,它已经够复杂了。。但我现在很幸运,因为我不必太担心夏令时等。。但是不能逃避未来的要求。。。谢谢DonalDonal,只是一个简单的问题。是否可以使用tcl 8.4为时钟增加一些秒数?我知道这在8.5中是可能的,但不确定在8.4中是否可能。另外,当我在8.4中尝试使用'add'和'clock'命令时,我得到了一个错误,当时我只是在clock seconds输出中添加了n秒,就像正常的算术运算一样。在8.4中使用有效的时钟命令是否可能?谢谢jack,我要试试这个。谢谢jack,我要试试这个。