clockコマンドについて

●基本テンプレート

clock add $time 2 day ?-option value? 
clock format $time -format "%Y/%m/%d %H:%M:%S" ?-option value...? 
clock scan $timestr -format "%Y/%m/%d %H:%M:%S" ?-option value...? 
clock seconds

 Tcl 8.5からは高精度のシステムクロックを参照するサブコマンド (clicks, microseconds, milliseconds)もありますが割愛します。

●今日の零時のtime値を得るには
 clock secondsで得られるtime値は、1970年1月1日の零時(UTC:協定世界時≒グリニッジ標準時)からの秒数で返されます。 従って、24*60*60で割った余りを切り捨て、 再び24*60*60を掛ければ、今日の零時の値になりそうです。 と思いきや、 日本とUTCは9時間ずれているので、これだと今日の零時ではなく、午前9時になってしまいます。

set now [clock seconds]
# ↓これだと09:00になってしまう
set today [expr int($now / (24*60*60)) * (24*60*60)]

うまい方法はないようで、結局formatした後再度scanするという、愚直な方法です。

set now [clock seconds]
set temp [clock format $now -format "%Y%m%d"]
set today [clock scan $temp -format "%Y%m%d"]

なお、clock addなどのコマンドには-timezoneや-localeオプションがあり、 時刻の演算と同時にタイムゾーンを指定することもできます。

やねうらの top
(first uploaded 2005/03/20 last updated 2005/03/20, MISUMI URANO)