C++でプログラミングをしているときに、現在の時刻を文字列にしたい時がある。その一方法を簡単に紹介。
時刻取得
次のような形でまずは時刻を取得することができる。__time64_tを使う理由としては、MSDNからの引用をすると__time32_tでは
UTC の 2038 年 1 月 19 日 03 時 14 分 07 秒以降の日付には使用できません
ということによる。(Visual C++ 2005では、time_tは__time64_tとのことなんでその心配はないとのこと)
1 2 3 4 5 |
__time64_t t1; _time64( &t1 ); struct tm t2; _localtime64_s( &t1, &t2 ); |
なお、2003などでは、_sがついたCRT関数のセキュリティが強化されたバージョンが使えないので例えばこんな感じにする必要があるでしょう。
1 2 3 4 5 6 7 8 9 10 |
__time64_t t1; _time64( &t1 ); struct tm t2; #ifndef _CRT_SECURE_NO_DEPRECATE _localtime64_s( &t1, &t2 ); #else t2 = *_localtime64( &t1 ); #endif |
文字列化
C++といいつつ、今回はATLやWTL、MFCでおなじみのCStringを使って行う。(Windows Visual Studioを使っていない人には参考にならないが、、、sprintfでも何でも使ってもらえれば)ここで、注意としてtm::tm_yearは1900年からの差分値ということなので1900足す必要がある。また、tm::tm_monは1月からの差分値ということなので1足す必要がある。
1 2 3 4 |
CString d; d.Format( _T( "%04d/%02d/%02d" ), t2.tm_year + 1900, t2.tm_mon + 1, t2.tm_mday ); CString t; t.Format( _T( "%02d:%02d:%02d" ), t2.tm_hour, t2.tm_min, t2.tm_sec ); |
以上で現在時刻(時間)を文字列化できる。