我继承了一个 TCL 脚本(我对该语言的熟悉度为零),需要为其添加一个 RFC 3339 时间戳:
2012-04-05T12:13:32.123456-08:00
在谷歌搜索后,我没有找到任何显示微秒或时区偏移量的方法(我找到了一种显示时区名称的方法,但没有帮助)。
有没有办法在不调用外部进程的情况下做到这一点?
最佳答案
在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 的调整(参见评论)并包装在过程中。
关于tcl - 如何在 TCL 中创建 RFC 3339 时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10034664/