Help us understand the problem. What is going on with this article?

String型タイムスタンプ作成方法(MFC版)

More than 3 years have passed since last update.

タイムスタンプ作成方法のひとつ

 タイムスタンプを作成するときは、time_tを使うのが通常かと思いますが、MFCの場合、unsafeだというエラーでコンパイルできなかった。セキュリティー強化型を使う必要があるのだろうか。
 
 MSDNには以下のような説明がされている。

多くの旧来の CRT 関数に、新しくセキュリティが強化されたバージョンができました。 セキュリティが強化された関数が存在する場合、セキュリティが弱い古いバージョンは推奨されないバージョンとしてマークされ、新しいバージョンには _s ("secure") のサフィックスが付いています。

ここで、"推奨されない" とは、その関数が CRT から削除される予定だということではありません。

また、セキュリティが強化された関数は、セキュリティ エラーを防止したり訂正したりするのではなく、エラー発生時にそのエラーをキャッチします。 これらの関数はエラー条件をチェックし、エラーが発生した場合に、エラー ハンドラーを呼び出します (「パラメーターの検証」を参照)。

 また、CTimeの場合、現在時刻を取得するGetCurrentTimeのメンバーファンクションが使用できなかった。原因がわからないので、__time64_t を使用して作成できた。__time32_tもあるが年数制限が近いので、3000年まで利用可能な64を使用する。この場合、上記のMSDNの説明にもあるように_s(サフィックス)のついた関数を使うのが正しいようだ。

 このプログラム上で使いやすいString型に変換してありますが、int型のまま使用する場合はコード内の下半分、String以下は必要ありません。

必須ヘッダー
<time.h>

以下は必要に応じて追加する。
<iomanip> は std::setw() や std::setfill()で使用。
<sstream> は stringstreamで使用。

timeStruct
std::string MFC_Fucntion::timeStamp() {

    struct tm timeStruct;
    __time64_t time64;
    errno_t err;

    _time64(&time64);
    err = _localtime64_s(&timeStruct, &time64);
    if (err) {
        exit(1);
    }

    std::string times;
    std::stringstream sst;
    sst <<  
        timeStruct.tm_year + 1900
        << std::setw(2) << std::setfill('0') << timeStruct.tm_mon + 1
        << std::setw(2) << std::setfill('0') << timeStruct.tm_mday
        << std::setw(2) << std::setfill('0') << timeStruct.tm_hour
        << std::setw(2) << std::setfill('0') << timeStruct.tm_min
        << std::setw(2) << std::setfill('0') << timeStruct.tm_sec;
    times = sst.str();
    return times;

}

アウトプット
20170721141845

takamon9
C/C++,ATL/MFC,C#(.NET),Python,OpenCv,VBAが得意。他にOpenSSL,ICU,SQL Serverなどを利用したWindowsアプリケーション作成などを嗜む。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away