ctime
C++版time.h。というかほとんどの実装ではctimeヘッダファイル内でtime.hをstd名前空間内にincludeしている。ハズなのだが、VC++6.0では何故かstd名前空間ではなくグローバル名前空間にincludeされている。(最新のMicrosoft Platform SDKでもグローバル名前空間にバラ撒かれていたのでMicrosoftは変える気はないんだろう。)
実際に使うときはコンパイラによってスコープ解決演算子をつけたりつけなかったりすればいいが、一つのソースで対応したいときは以下のように_MSC_VERが定義されているかで場合分けすれば楽だ。
#include <ctime> #include <iostream> #ifdef _MSC_VER #define NS_STD #else #define NS_STD std #endif int main() { NS_STD::time_t pt; NS_STD::time(&pt); struct NS_STD::tm *lpt = NS_STD::localtime(&pt); std::cout << "present time(sec from 1970) : " << pt << std::endl; std::cout << "local time : " << lpt->tm_year+1900 <<; std::cout << " " << lpt->tm_mon+1 << " " << lpt->tm_mday; std::cout << " " << lpt->tm_hour << ":" << lpt->tm_min std::cout << ":" << lpt->tm_sec << std::endl; return 0; }
とりあえずこのソースでbcc32(BorlandのFreeコンパイラ)とVC++6.0通ることを確認。
それにしても…、localtime()関数の戻り値がポインタってのは何とかならないんだろうか?思わずdeleteしてしまいそうになる。