3

我继承了一个 TCL 脚本(我对该语言的熟悉度为零)并且需要向它添加一个 RFC 3339 时间戳:

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

搜索谷歌后,我没有找到任何显示微秒或时区偏移的方法(我找到了一种显示时区名称的方法,但这无济于事)。
有没有办法在不调用外部进程的情况下做到这一点?

4

1 回答 1

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

于 2012-04-05T21:37:04.760 回答