我继承了一个TCL脚本(我对该语言并不熟悉),需要为其添加RFC 3339时间戳:
2012-04-05T12:13:32.123456-08:00
搜索谷歌后,我没有找到任何显示微秒或时区偏移量的方法(我找到了一种显示时区名称的方法,但这没有帮助)。
有没有办法在不调用外部流程的情况下执行此操作?
答案 0 :(得分:4)
在TCL8.5中,您可以尝试以下命令:
% clock format [clock seconds] -format "%Y-%m-%dT%T%z"
2012-04-05T16:06:07-0500
除了亚秒级分辨率外,它可以为您提供所有内容。 clock microseconds
命令将以微秒为单位给出时间,但我找不到与之匹配的格式字符串标识符。您可以使用它从头开始构建自己的命令:
proc timestamp_rfc3339 {} {
set us [clock microseconds]
set sec [expr {$us / 1000000}]
set micro [expr {$us % 1000000}]
set ts [clock format $sec -format "%Y-%m-%dT%T"]
regexp {(...)(..)} [clock format $sec -format "%z"] matched tzh tzm
return [format "%s.%06s%s:%s" $ts $micro $tzh $tzm]
}
运行此结果会产生类似2012-04-05T16:35:06.366378-05:00
的时间戳。
编辑:更新了代码示例以合并user1179884的调整(请参阅注释)并包含在proc中。