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

标签 tcl

我继承了一个 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/

相关文章:

shell - 如何一起使用 expect 和 shell 脚本

tcl - 如何在 TCL 中的字符串中查找 ','

tcl - 在 tcl 中如何获得给定数字的小数部分

tcl - 这个说法有什么问题

tcl - 如何处理已删除命名空间中的变量?

regex - Tcl 相当于 Perl 一行代码

wrapper - tcl:包装一个同名的proc

regex - 在 tcl 中的正则表达式中传递变量

tcl - 我们需要在T​​CL中添加 “unset”变量吗?

python - Tcl 在我的 Python27 目录中似乎位于错误的位置。我怎样才能改变这个?