首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用时钟命令计算Tcl中的时间跨度

利用时钟命令计算Tcl中的时间跨度
EN

Stack Overflow用户
提问于 2017-06-05 10:24:44
回答 2查看 3.9K关注 0票数 2

我需要使用Tcl计算24:00小时格式时钟中一天中两个时段之间的时间差。

假设我的开始时间是早上06:30,结束时间是晚上6:30。在windows中使用Active TCL8.5和8.6时,我尝试了以下几种方法。

代码语言:javascript
复制
set morn [clock scan 06:30:00 -format %H:%M:%S]
set even [clock scan 18:30:00 -format %H:%M:%S]
set diff [clock format [expr $even - $morn ] -format %H:%M:%S]

答案应该是12:00,这是实际的区别,但是,我得到的答案是17:30,这是完全混乱的。

我假定格林尼治时间差在05:30:00被添加到了差异中,因为我在一个GMT+5:30时区。

我怎么才能得到确切的区别呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-05 13:24:52

clock命令中没有任何东西可以将时间间隔转换为人类可读的形式,因为它专注于处理时间瞬间。

你说的对,你所处的时区让时间间隔变得奇怪。传递-gmt 1选项会有所帮助,但只有在24小时或更长时间间隔之前才会有所帮助。到了那个时候,它就会转过来,看上去很奇怪。

处理此问题的方法是直接进行格式化。这并不难。

代码语言:javascript
复制
proc formatTimeInterval {intervalSeconds} {
    # *Assume* that the interval is positive
    set s [expr {$intervalSeconds % 60}]
    set i [expr {$intervalSeconds / 60}]
    set m [expr {$i % 60}]
    set i [expr {$i / 60}]
    set h [expr {$i % 24}]
    set d [expr {$i / 24}]
    return [format "%+d:%02d:%02d:%02d" $d $h $m $s]
}
代码语言:javascript
复制
puts [formatTimeInterval [expr {$even - $morn}]]
#==> +0:12:00:00
票数 2
EN

Stack Overflow用户

发布于 2017-06-06 08:49:37

我不明白你为什么不使用-timezone选项?我在TZ=CET,所以我的答案是13:00

如果我添加"-timezone UTC“选项,就会得到正确的答案:

代码语言:javascript
复制
set morn [clock scan 06:30:00 -format %T]
puts "morn = $morn"

set even [clock scan 18:30:00 -format %T]
puts "even = $even"

set diff [clock format [expr $even - $morn ] -format "%Y:%m:%d %T"]
puts "diff = $diff"

puts "difference = [expr $even - $morn]"

puts "with -timezone UTC = [clock format [expr $even - $morn ] -timezone UTC -format %T]"

显示是

代码语言:javascript
复制
morn = 1496723400
even = 1496766600
diff = 1970:01:01 13:00:00
difference = 43200
with -timezone UTC = 12:00:00
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44366856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档