hiro-****@hiro-*****
hiro-****@hiro-*****
2003年 12月 23日 (火) 16:08:46 JST
ども、hiroです。 TimeZoneについて調べました。 time.hでは _timezone という変数が定義されておりまして、 tzset();でこの変数が設定されるようです。time.hはCTimeを 使える状態であれば暗黙のうちに読み込まれています。 _timezone に設定される値は(標準時-ローカル時)を秒で表した物で、 日本ですと -32400 テキサスですと 21600 がセットされます。 そこで、 tzset(); CString TIME_ZONE; TIME_ZONE.Format("%+03d%02d",(-_timezone)/60/60,(-_timezone)/60%60); とすることにより、DEF_TIME_ZONEと同じ形式のものを動的に作ることができます。 また、HeaderInfo.cpp の564行目〜573行目のchange local timeは tzset(); t-=CTimeSpan(_timezone); で同じ効果が得られます。 tzset();は起動時に一度呼び出すべきか、使うときに毎回呼び出すべきか悩ましいです。 後者ですと、Pochy起動中にタイムゾーンを変えた場合にすぐに対応できることになります。 前者ですと「少しでも軽く」というPochyのコンセプトに合います。 また、_timezoneをプログラムで使うようにすると、当然のことながら、Windowsのタイムゾーンを 正しく設定していない人には悪影響が出るようになります。このような人へも救いの手だてを 残しておくべきか(setting.iniにより強制的に+0900にするモードを残す)、そのような人には これを機会にタイムゾーンを設定してもらうか、判断がムズカシイと思います。 ではでは。