我繼承了TCL腳本(我有零熟悉的語言),並需要一個RFC 3339時間戳添加到它:如何在TCL中創建RFC 3339時間戳?
2012-04-05T12:13:32.123456-08:00
谷歌搜索後,我還沒有發現顯示微秒的任何手段或時區偏移量(我找到了一種顯示時區名稱的方法,但這沒有幫助)。
有沒有辦法做到這一點,而無需調用外部進程?
我繼承了TCL腳本(我有零熟悉的語言),並需要一個RFC 3339時間戳添加到它:如何在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中。
我這樣做:' regexp {(...)(..)} [時鐘格式[時鐘秒]格式「%z」]匹配小時分鐘 返回[格式「%s。%s%s:% s「[timestamp -format'%Y-%m-%dT%X」] [expr [clock microseconds]%1000000] $ hours $ minutes] 100000] $ hours $ minutes]'。基本上是一樣的,但我用一個正則表達式在時區偏移量中放置一個冒號,這在rfc3339中是必需的。 – kwiqsilver 2012-04-05 22:12:31
另一件必要的事情......我必須將微秒的「%s」更改爲「%06s」以保持前導零。 – kwiqsilver 2012-04-05 22:31:48
@ user1179884:你應該記下你自己做了什麼。 (這是允許的!)然後,我們可以展示如何對問題做出_exact_解決方案,並將其投票。 – 2012-04-06 05:51:49
我相信這將取決於您的TCL版本 – resmon6 2012-04-05 19:45:26
@ resmon6唯一有問題的部分將獲得毫秒;在8.4之前完全不可用,並且語法在8.5中改變。 – 2012-04-06 05:54:02