Tcl使用clock format计算时间差多1小时及1970默认日期问题
问题原因
- 1970年1月1日输出的成因
Tcl的clock format命令用于将Unix时间戳(即从1970年1月1日00:00:00 UTC开始累计的秒数)转换为可读日期时间字符串。你传入的参数是两个时间的差值7秒,对应Unix时间戳的第7秒,因此会输出1970年1月1日的对应时间。 - 多出1小时的成因
clock format默认使用系统本地时区做时间转换,示例中的系统时区为CET(中欧时间),比UTC基准时间快1小时,因此UTC基准的00:00:07转换为CET时区后就会显示为01:00:07,多出的1小时是时区偏移导致的。
解决方案
要输出天、时、分、秒格式的时间差,可选择以下两种方案:
- 手动计算各时间单位(适配任意时长的时间差)
set t1 [clock seconds] set t2 [clock seconds] set diff [expr {$t2 - $t1}] set days [expr {$diff / 86400}] set rem [expr {$diff % 86400}] set hours [expr {$rem / 3600}] set rem [expr {$rem % 3600}] set minutes [expr {$rem / 60}] set seconds [expr {$rem % 60}] puts [format "%d天 %02d:%02d:%02d" $days $hours $minutes $seconds]
- 强制指定UTC时区调用
clock format(适配小于1天的时间差)
set t1 [clock seconds] set t2 [clock seconds] set diff [expr {$t2 - $t1}] puts [clock format $diff -timezone UTC -format "%H:%M:%S"]
内容的提问来源于stack exchange,提问作者Pedro Cardoso
相关产品推荐
相关产品推荐

