Tux*_*Tux 5 c++ visual-c++ c++11
我正在寻找该<ctime>库的C++ 11版本.C++ 11中包含这样的内容吗?
编辑:任何具有更多功能的东西都是完美的!
编辑2:我希望在我正在制作的游戏中使用它,这样我就可以跟踪总的播放时间.任何可以帮助我的东西都是我正在寻找的东西.
chr*_*ris 11
C++ 11包括<chrono>头部,它提供了具有功能的不同类型的时钟(我将使用高分辨率的时钟)now.您可以减去收到的这些时间中的两个,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
Run Code Online (Sandbox Code Playgroud)
但是,请注意,secondsElapsed除非is_steady时钟成员是true因为该成员true意味着后续呼叫now()将提供比之前呼叫更大的号码,否则不能保证是积极的now().
其中的许多函数<ctime>,特别是ctime函数本身,都将日期和时间格式化为字符串.
C++ 11提供了一个新的io-manipulator std::put_time,它确实取代了C风格的函数,并且与C++的语言环境相关的功能完全兼容.
具体来说,给定C风格tm格式的时间点:
std::time_t t = std::time(NULL);
std::tm tm = *std::localtime(&t);
Run Code Online (Sandbox Code Playgroud)
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';
Run Code Online (Sandbox Code Playgroud)
这些调用打印如下:
2012?11?15? 11?49?04? JST // first call
??24?11?15? 10?49?05? JST // second call
Run Code Online (Sandbox Code Playgroud)
<chrono>在另一个答案中提到的时间点检索函数也可以tm使用该to_time_t方法转换为结构,然后与其一起使用put_time.这使得代码独立于任何C风格的函数调用,至少在表面上:
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';
Run Code Online (Sandbox Code Playgroud)
结合<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';
Run Code Online (Sandbox Code Playgroud)
这些是上面所有函数调用所需的标头:
#include <iostream>
#include <iomanip>
#include <ctime>
#include <chrono>
Run Code Online (Sandbox Code Playgroud)
可用性说明我不确定MSVC和Clang,但不幸的是,GCC还没有提供这个std::put_time功能:http://gcc.gnu.org/bugzilla/show_bug.cgi?id = 54354 .
| 归档时间: |
|
| 查看次数: |
4128 次 |
| 最近记录: |