1つはシステム依存の高分解能の値を返すclock clicksです。
CPUのクロックティック単位のカウント値を返します。
-millisecondsオプションでミリ秒単位のカウント値を返します。
clock clicks => 1089645 clock clicks -milliseconds => 983625806 |
もう1つは、現在の時刻をシステム依存の整数で返すclock secondsです。
新世紀からの経過時間を秒数で返します。
clock seconds => 1006006782 |
clock format [clock seconds] => Sat Nov 17 23:26:38 JST 2001 clock format [clock seconds] -gmt true => Sat Nov 16 15:26:38 JST 2001 |
-formatオプションで書式を与えて変換することができます。
clock format [clock seconds] -format {%Y/%m/%d(%a) %p %I:%M:%S} => 2001/11/17(Sat) PM 11:26:38 |
-formatオプションで指定できるキーワードは以下の通りです。
キーワード | 説明 |
---|---|
%% | %に置換する |
%a | 曜日の短縮形式 (Mon, Tue, ...) |
%A | 曜日 (Monday, Tuesday, ...) |
%b | 月の短縮形式 (Jan, Feb, ...) |
%B | 月 (January, February, ...) |
%c | ロケール規定の日付と時刻 |
%d | 日/月 (01 - 31) |
%H | 24時間時刻形式の時 (00 - 23) |
%I | 12時間時刻形式の時 (00 - 23) |
%j | 日/年 (001 - 366) |
%m | 月 (01 - 12) |
%M | 分 (00 - 59) |
%p | AMかPM |
%S | 秒 (00 - 59) |
%U | 週/年 (00 - 52) 日曜日を週の最初の日とする |
%w | 週の番号 (日曜日 = 0) |
%W | 週/年 (00 - 52) 月曜日を週の最初の日とする |
%x | ロケール規定の日付 |
%X | ロケール規定の時刻 |
%y | 西暦年の短縮形式 (00 - 99) |
%Y | 西暦年 (2001等) |
%Z | タイムゾーン |
%D | %m/%d/%y形式の日付 |
%e | 日/月 (1 - 31) 先頭に0を付けない |
%h | 月の短縮形式 |
%n | ニューラインを挿入する |
%r | %I:%M:%S %p形式の時刻 |
%R | %H:%M形式の時刻 |
%t | タブを挿入する |
%T | %H:%M:%S形式の時刻 |
clock scan {1999-10-31} => 941295600 clock scan {1999-10-31} -gmt true => 941328000 |
日付/時刻形式の書式は以下の通りです。
# 時刻 (meridian = AM or PM) hh?:mm?:ss?? ?meridian? ?zone? hhmm ?meridian? ?zone? # 日付 (西暦2000年対応) mm/dd?/yy? monthname dd ?, yy? dd monthname ?yy? day, dd monthname yy ?CC?yymmdd ?CC?yy-mm-dd dd-monthname-?CC?yy # ISO 8601日時形式 (T = リテラル) CCyymmddThhmmss CCyymmdd hhmmss CCyymmddThh:mm:ss |
修飾子で相対日時を指定することができます
clock scan {1999-10-31 3 day} => 941554800 clock scan {1999-10-31 4 hour} => 941310000 |
-baseオプションで基準日を指定することができます。
clock scan "3 day" -base [clock scan {1999-10-31}] => 941554800 clock scan "4 hour" -base [clock scan {1999-10-31}] => 941310000 |
相対日時に指定できる修飾子は以下の通りです。
# 単数形 year, fortnight, month, week, day, hour, minute(min), second(sec) # 複数形 years, fortnights, months, weeks, days, hours, minutes(min), seconds(sec) # その他 tomorrow, yesterday, today, now, last, this, next, ago sunday, monday, tuesday, wednesday, thursday, friday, saturday 等 |
proc isleapyear {year} { if {[catch "clock scan 2/29/$year"]} { return 0 } else { return 1 } } isleapyear 2000 => 1 isleapyear 2001 => 0 |
monday修飾子を使ってハッピーマンデー(第2月曜日)の成人式と体育の日を調べてみましょう。
# 成人式 clock format [clock scan "2 monday" -base [clock scan 1/1/2001]] -format "%D" => 01/08/01 # 体育の日 clock format [clock scan "2 monday" -base [clock scan 10/1/2001]] -format "%D" => 10/08/01 |
残念ながら、clockコマンドを使っても春分の日と秋分の日は調べられません。(^^;)