C++で日付取得する方法について

C言語では<time.h>を利用して時間の構造体を取得していました、同様にC++は上位置換なので同じ方法で取得することができますがなんか違和感を覚える人向けにC++チックな日付の取得について

C++で日付を利用するときには以下の2つのヘッダを利用すると便利です

#include <iomanip> //時間を取得するため
#include <sstream> //値を簡単に文字列にするため

例えば 2015-5-19 のようなフォーマットの文字列が必要な場合はこのように記述します


    //現在日時を取得する
    time_t t = time(nullptr);

    //形式を変換する    
    const tm* lt = localtime(&t);

    //sに独自フォーマットになるように連結していく
    std::stringstream s;
    s<<"20";
    s<<lt->tm_year-100; //100を引くことで20xxのxxの部分になる
    s<<"-";
    s<<lt->tm_mon+1; //月を0からカウントしているため
    s<<"-";
    s<<lt->tm_mday; //そのまま

    //result = "2015-5-19" 
    std::string result = s.str();

stringstreamを利用することによってデフォルトのフォーマットだけでは対応できない場合も独自のフォーマットを定義できる。