私は TCL スクリプトを継承し (この言語についてまったく詳しくありません)、それに RFC 3339 タイムスタンプを追加する必要があります。
2012-04-05T12:13:32.123456-08:00
Google を検索した後、マイクロ秒またはタイムゾーン オフセットを表示する方法が見つかりませんでした (タイムゾーン名を表示する方法を見つけましたが、それは役に立ちません)。
外部プロセスを呼び出さずにこれを行う方法はありますか?
私は TCL スクリプトを継承し (この言語についてまったく詳しくありません)、それに RFC 3339 タイムスタンプを追加する必要があります。
2012-04-05T12:13:32.123456-08:00
Google を検索した後、マイクロ秒またはタイムゾーン オフセットを表示する方法が見つかりませんでした (タイムゾーン名を表示する方法を見つけましたが、それは役に立ちません)。
外部プロセスを呼び出さずにこれを行う方法はありますか?
TCL8.5 では、次のコマンドを試すことができます。
% clock format [clock seconds] -format "%Y-%m-%dT%T%z"
2012-04-05T16:06:07-0500
これにより、1 秒未満の解像度以外のすべてが得られます。この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 にラップするようにコード サンプルを更新しました。