在tcl的12:00:00 am处获取“今天”的值的最佳方法是什么?
要获取“现在”的值,我可以使用:
set now [clock seconds]
但是今天将在拨打电话的任何小时/分钟/秒进行。如果我需要早上12:00:00怎么办?我是否需要诉诸于此:
set today [clock scan [clock format [clock seconds] -format "%Y-%m-%d"] -format "%Y-%m-%d"]
有更好的方法吗?
答案 0 :(得分:0)
要获取今天12:00的时间戳,请使用:
set timestamp [clock scan "12:00:00" -format "%H:%M:%S"]
或
set timestamp [clock scan "12:00" -format "%H:%M"]
要在另一任意天获得这样的时间戳,请计算基本时间戳,然后在上述操作期间使用-base
将其应用。 (-base
的默认值是调用时clock seconds
的结果;这是最常用的。而且,如果您解析一个没有时间的日期,则时间部分将被视为午夜那天。)
set base [clock scan "2018/12/25" -format "%Y/%m/%d"]
set timestamp [clock scan "12:00:00" -format "%H:%M:%S" -base $base]
puts [clock format $timestamp]
您还可以一次构建所有时间字符串,然后一次性解析它。还要注意,单独解析基础的一个很好的理由是,您可以在解析整个时间集合时创建一次并重复使用几次(这在运行时午夜时停止了对时间变化的解释)您的程序)。
当然,如果您不使用clock scan
选项,-format
也会推断出您在谈论小时,分钟和秒,但这很容易理解,如果您确实知道格式,则不建议使用。 (对于非美国订单日期,它不能很好地应付,并且在这种情况下,它使用的内部解析器会有一些奇怪的行为。)