<chrono>
ライブラリは、時刻をtime_t
に変換する能力を持つsystem_clock
を除いて、時間だけで日付は処理しません。したがって、<chrono>
を日付に使用しても、物事はあまり改善されません。うまくいけば、それほど遠くない将来にchrono::date
のようなものが得られることを願っています。
#include <chrono> // chrono::system_clock
#include <ctime> // localtime
#include <sstream> // stringstream
#include <iomanip> // put_time
#include <string> // string
std::string return_current_time_and_date()
{
auto now = std::chrono::system_clock::now();
auto in_time_t = std::chrono::system_clock::to_time_t(now);
std::stringstream ss;
ss << std::put_time(std::localtime(&in_time_t), "%Y-%m-%d %X");
return ss.str();
}
注std::localtime
ことはデータ競合が発生する可能性があります、あなたは次のように<chrono>
を使用することができると述べた
。 localtime_r
または類似の機能がご使用のプラットフォームで使用可能な場合があります。
更新:あなたが書くことができハワードヒナントのdate libraryの新しいバージョンを使用して
: "34.043473124 UTC:15 2015年7月24日05"
#include "date.h"
#include <chrono>
#include <string>
#include <sstream>
std::string return_current_time_and_date() {
auto now = std::chrono::system_clock::now();
auto today = date::floor<days>(now);
std::stringstream ss;
ss << today << ' ' << date::make_time(now - today) << " UTC";
return ss.str();
}
これは次のように出力します。無関係なノートで
、const
オブジェクトを返すと、C++ 11で望ましくないとなっています。 constの戻り値をから移動することはできません。後続のconstはメンバ関数に対してのみ有効であり、この関数はメンバである必要がないので、後続のconstも削除しました。
既にこのような質問がありましたら参照してください。そうでない場合は質問してください。 – legends2k
*可能重複:* http://stackoverflow.com/questions/12346260/c-date-and-time – legends2k
あなたはC++ 11でもっと良くなるつもりはありません。クロノは時間のタイプのものよりもタイミング(何かがどれくらい時間がかかったか)に関するものです。しかし、あなたはBoost Date Timeをチェックするかもしれません。より堅牢な日時機能を備えています。 –