我继承了一个 TCL 脚本(我对该语言的熟悉度为零)并且需要向它添加一个 RFC 3339 时间戳:
2012-04-05T12:13:32.123456-08:00
搜索谷歌后,我没有找到任何显示微秒或时区偏移的方法(我找到了一种显示时区名称的方法,但这无济于事)。
有没有办法在不调用外部进程的情况下做到这一点?
我继承了一个 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 的调整(请参阅评论)并包装在 proc 中。