如何在TCL中创建RFC 3339时间戳?

时间:2012-04-05 19:18:08

标签: tcl

我继承了一个TCL脚本(我对该语言并不熟悉),需要为其添加RFC 3339时间戳:

2012-04-05T12:13:32.123456-08:00

搜索谷歌后,我没有找到任何显示微秒或时区偏移量的方法(我找到了一种显示时区名称的方法,但这没有帮助)。
有没有办法在不调用外部流程的情况下执行此操作?

1 个答案:

答案 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中。