2011-03-25 4 views
16

現在の時刻をエレガントな "YYYY-MM-DD-HH-MM-SS"形式の文字列として取得しようとしています方法。 Boostの "Date Time"ライブラリからISO形式で現在の時刻を取得することはできますが、私にはうまくいかない他の区切り文字列があります(ファイル名でこれを使用しています)。 もちろん、区切り文字列を置き換えることはできますが、日時の書式設定オプションでこれを行うより良い方法があると感じています。そのような方法はありますか?あれば、どうすれば使えますか?現在の時刻をYYYY-MM-DD-HH-MM-SS文字列として取得する

答えて

30

std::strftimeを使用してください。標準C++です。

#include <cstdio> 
#include <ctime> 

int main() 
{ 
    std::time_t rawtime; 
    std::tm* timeinfo; 
    char buffer [80]; 

    std::time(&rawtime); 
    timeinfo = std::localtime(&rawtime); 

    std::strftime(buffer,80,"%Y-%m-%d-%H-%M-%S",timeinfo); 
    std::puts(buffer); 

    return 0; 
} 
+0

'std :: string'に書き込みを行い、バッファオーバーフローの心配が無くなってしまいました。理解できるように、 'strftime'は予測可能な最大長を持つことが期待されます。何か落ち着きはありますか? –

+0

**スレッドセーフ**ソリューションはありますか? [link](http://en.cppreference.com/w/cpp/chrono/c/localtime)参照 - std :: localtime()はスレッドセーフではありません。 – Yuri

2

回答はgetとtakeの意味によって異なります。書式付きの時間文字列を出力しようとする場合は、strftime()を使用します。テキスト文字列をバイナリ形式に解析する場合は、strptime()を使用します。

関連する問題