ライブラリのC++11バージョンを探してい<ctime>
ます。このようなものはC++11に含まれていましたか?
編集:より多くの機能を備えたものなら何でも完璧です!
編集2:プレイした合計時間を追跡できるように、これを自分が作成しているゲームで使用したいと考えています。それで私を助けるものは何でも私が探しているものです。
ライブラリのC++11バージョンを探してい<ctime>
ます。このようなものはC++11に含まれていましたか?
編集:より多くの機能を備えたものなら何でも完璧です!
編集2:プレイした合計時間を追跡できるように、これを自分が作成しているゲームで使用したいと考えています。それで私を助けるものは何でも私が探しているものです。
C ++ 11には、機能<chrono>
を備えたさまざまなタイプのクロック(高解像度のものを使用します)を提供するヘッダーが含まれていnow
ます。から受け取ったこれらの時間の2つを引くと、それらの間now()
の合計数<unit>
(秒を使用します)を取得できます。
using clock = std::chrono::high_resolution_clock;
using unit = std::chrono::seconds;
std::chrono::time_point<clock> startTime = clock::now(); //get starting time
... //do whatever stuff you have to do
std::chrono::time_point<clock> thisTime = clock::now();
long long secondsElapsed = std::chrono::duration_cast<unit>(thisTime - startTime).count();
//now use secondsElapsed however you wish
//you can also use other units, such as milliseconds or nanoseconds
ただし、クロックsecondsElapsed
のメンバーが正であるとは限らないことに注意してください。そのメンバーは、の後続の呼び出しが前のの呼び出しよりも大きな番号を与えることを意味するためです。is_steady
true
true
now()
now()
の関数の多く<ctime>
、特にctime
関数自体は、日付と時刻を文字列としてフォーマットする必要があります。
C ++ 11は、新しいio-manipulatorを提供しますstd::put_time
。これは、実際にCスタイルの関数を置き換え、C++のロケール関連の機能と完全に互換性があります。
tm
具体的には、Cスタイル形式の時点を指定します。
std::time_t t = std::time(NULL);
std::tm tm = *std::localtime(&t);
std::put_time
%c
(ロケール固有の日付/時刻)、%Ec
(ロケール固有、日本の帝国年などの拡張日時)、または%Z
(タイムゾーン)などのロケール固有のフォーマットパラメータの場合、選択したロケールに従ってこれを印刷できます。使用されています:
std::cout.imbue(std::locale("ja_JP.utf8"));
std::cout << "ja_JP: " << std::put_time(&tm, "%c %Z") << '\n';
std::cout << "ja_JP: " << std::put_time(&tm, "%Ec %Z") << '\n';
これらの呼び出しは次のように出力されます。
2012年11月15日 11時49分04秒 JST // first call
平成24年11月15日 10時49分05秒 JST // second call
他の回答で言及されているからの時点検索関数は、メソッドを使用して構造体に<chrono>
変換し、と一緒に使用することもできます。これにより、少なくとも表面的には、コードがCスタイルの関数呼び出しから独立します。tm
to_time_t
put_time
using namespace std;
auto now = chrono::system_clock::now();
time_t now_c = chrono::system_clock::to_time_t(now);
cout << "Locale-specific time now: "
<< put_time(localtime(&now_c), "%c %Z") << '\n';
期間タイプと組み合わせると<chrono>
、日付と時刻の計算と印刷に大きな柔軟性がもたらされます。
time_t now_c = chrono::system_clock::to_time_t(now - chrono::hours(48));
cout << "Locale-specific time on the day before yesterday: "
<< put_time(localtime(&now_c), "%c %Z") << '\n';
上記のすべての関数呼び出しに必要なヘッダーは次のとおりです。
#include <iostream>
#include <iomanip>
#include <ctime>
#include <chrono>
可用性に関する注意MSVCとClangについてはよくわかりませんが、残念ながら、GCCはstd::put_time
まだ機能を提供していません: http://gcc.gnu.org/bugzilla/show_bug.cgi?id= 54354。