日付と時刻の関数
日付と時刻の参照
| Out[1]= |  |
|
関数
DateListを使うと,オペレーティングシステムの管理する現在の日付と時刻を得ることができる.
DateListは夏時間の調整等はオペレーティングシステムにおいてすでに行われていることを前提とする.さらに,オペレーティングシステムレベルで適当な時刻帯が選択済みであることを前提とする.
変数
$TimeZoneは,使用中のコンピュータシステムによって仮定される現在の時間帯を返す.時刻帯の値はローカル時からグリニッジ標準時(GMT)を差し引くことで得られる時間差を示す.例えば,米国東部標準時間(EST)ならば,この値は
-5になる.また,夏時間は時刻帯の値に含まれるので,米国東部夏時間(EDT)なら値は
-4になる.
| Out[2]= |  |
|
+9の時刻帯における現在の時間を参照する.日本の標準時に相当する.
| Out[3]= |  |
|
時間に関する関数
オペレーティングシステムの時間管理は一定間隔で行われている.この時間幅は
$TimeUnitを参照することで知ることができる.通常,この値は

秒あるいは

秒程度に設定される.
計算中の一時停止
| Out[4]= |  |
|
10秒待ってから,時間情報を取得する.待機しようがしまいが, TimeUsed[]の返してくるCPU時間は同じことに注目.
| Out[5]= |  |
|
日付情報と絶対時間の変換
| Out[6]= |  |
|
| Out[7]= |  |
|
| Out[8]= |  |
|
| DateList["string"] | 日付の文字列をリストに変換する |
| DateList[{"string",{"e1","e2",...}}] | "string"から要素"ei"を抽出することにより得られる日付のリストを返す |
異なる日付形式からの変換
DateList["string"]を使うと,日付形式が十分に明確である限り,日付文字列を日付リストに変換することができる.
| Out[9]= |  |
|
変換をより制御するために,文字列に現れるデータ要素の順序とタイプを指定することができる.要素には
"Year",
"Quarter",
"Month",
"MonthName",
"Day",
"DayName",
"Hour",
"AMPM",
"Minute",
"Second"等の文字列が使える.
| Out[10]= |  |
|
日付要素の区切り記号に文字や数字が含まれる場合は,それも日付要素の一部として指定しなければならない.
| Out[11]= |  |
|
異なる日付形式への変換
DateStringは日付と時間をきれいに文字列表現するために使われる.正確な出力形式は
"DateTime",
"DayName",
"HourShort"等の日付要素の長いリストから指定することができる.
| Out[12]= |  |
|
| Out[13]= |  |
|
文字列から日時を抽出する
DatePattern[elems]は文字列マッチ関数の文字列パターンとして使うことができる.日付要素は
DateListで使われるのと同じであるが,デフォルトの日付要素の区切り記号は
/,
-,
:,
.の記号に限られる.他の区切り記号は日付要素のリストで明示的に与えることができる.
| Out[14]= |  |
|
| Out[15]= |  |
|
評価時間の計測
1つの
Mathematica 式の評価にどれだけの時間がかかるかを知りたければ関数
Timingを使う.
Timingは
TimeUsedの増分に相当する.注意してほしいが,
Timingは式評価のためにカーネルが使ったCPU時間だけを計測する.出力への書式適用や外部プログラムで使った時間は含まれない.
AbsoluteTimingを用いて絶対的な経過時間を計測することができる.
AbsoluteTimingで計測される時間も
Timingで計測される時間も評価される式だけではなく,環境条件によっても違ってくるので注意が必要である.
第一に,使用時間は使っているコンピュータの機種やオペレーティングシステムに依存する.CPU処理の速度だけでなく,メモリキャッシュの設定等にも依存する.また,言うまでもないが,計算で使われるカーネルの内部コードに使われているコンパイル時の最適化処理の詳細にも依存する.
さらに,計測対象となる計算が行われているときのセッション状態にも使用時間は依存する.これは,実時間的にカーネルが採用する計算の最適化法の多くは前の計算結果に依存する形で選定されるためである.例えば,計算を進める上で,カーネルは前に取得した結果を保持しておき同じ式が現れたなら不必要には再評価をせず,保持した結果を呼び戻す,というような処理がよく行われる.さらに,組込み関数によっては,最初に呼び出したときに内部に値のテーブルを作成しておき,再度同じ形式で呼出しがあったときにはそのテーブルを参照することで実行に必要な時間を短縮する,というような処理が行われる.このような理由から,同じ式を繰り返し計算させても,セッションの現況が違うため,前とは違った時間が計測されることもしばしばある.
計算に費したCPU時間を見る.計算結果自体は表示しないように( Nullとなるように)セミコロンを付け足しておく.
| Out[16]= |  |
|
同じ階乗を計算する.前回の計算で内部テーブルができているので,計測できるほどのCPU時間はかからない.
| Out[17]= |  |
|
| Out[18]= |  |
|
Timingにより計測される時間は,使われるコンピュータによっても違うが,ある最小時間幅(
$TimeUnit)までの精度でしかないことに注意すること.例えば,0〜
$TimeUnitの間の時間ならすべて0として報告されてしまう.
計算時間の制限
対話的に計算を進める場合,非常に長い時間がかかるようならば手動で計算を途中で止めたいことがある.
TimeConstrainedを使えば,プログラムの中から自動的に計算を強制的に中止することが可能になる.
TimeConstrainedで指定した時間内に式の評価が終了しない場合は,評価は中断され,
$Aborted(もしくは,特別指定した式)が戻り値として返される.
TimeConstrainedを使うと,最初にある計算法で問題を解かせてみて,時間がかかるようならば,別の方法を試してみることも可能である.ただし,設定した時間が経過しても計算が中断しない場合もあるので注意が必要である.このような状況はカーネルが中止不可の計算部分を処理しているときに起る.さらに,同じ
TimeConstrainedの指定をしても,違うコンピュータで評価した場合,結果が違ってくることがある.