1月12日(2009)


time関係の関数について…

time_t型、およびtm型を使った日付クラスを作ったときに、色々混乱したので
そこらへんについて少々。

【time_t型】
1970年1月1日午前0時からの経過秒数。
世界協定時刻 (UTC)基準、(ロンドンのグリニッジ天文台)なので、日本国内での
時間として使う場合は時差(9時間)を考慮しなければならない。
「なんか9時間ずれるんだよなぁ~」みたいな怪奇現象がおこったら
時差を疑ってみるといい、っていうか疑うしかない。

【tm型】
時間を年月日時分秒で扱うことができる。基本的にtime_t型と組み合わせて使う。
time_t ⇔ tm というコンバートを行う関数が用意されているので、それを使う。

【関数】
time()
現在の時刻をUTCで取得

localtime_s()
time_tからローカル時刻でのtm型を取得。
この関数でtm型を取得してから時刻を取得するのが一般的な流れか

gmtime_s()
time_tからUTCのままでtm型を取得する。

mktime()
ローカル時刻のtm型からUTCでのtime_t型を取得する。
同時にtm型の正規化(設定されていないメンバに値をセット)する。

【備考】
localtime_s() ⇒ mktime()だとtime_tは元に戻る。
gmtime_s() ⇒ mktime()だと時差の分だけずれる。

【注意】
例えば時間を2時間単位でまるめこもうとして、
time_t cur_time;
cur_time = cur_time - (cur_time % (60*60*2))
とやっても上手くいかない。
…というのも、まるめこまれているのはあくまでUTC基準時刻なので、時差を考慮すると9時間の
ずれが生じてしまうので、その時点でずれてしまう。
よって丸め込むのであればローカル時刻にしてからでないと駄目。
最終更新:2009年01月13日 20:10
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。