我正在寻找一种在 C++ 中以 HH::MM::SS 方式节省时间的方法。我在这里看到它们有很多解决方案,经过一番研究后我选择了time
and localtime
。然而,似乎localtime
函数有点棘手,因为它says http://rabbit.eng.miami.edu/info/functions/time.html#localtime:
对 localtime 和 gmtime 的所有调用都使用相同的静态结构,因此
每次调用都会覆盖前一个调用的结果。
这导致的问题如下面的代码片段所示:
#include <ctime>
#include <iostream>
using namespace std;
int main() {
time_t t1 = time(0); // get time now
struct tm * now = localtime( & t1 );
std::cout << t1 << std::endl;
sleep(2);
time_t t2 = time(0); // get time now
struct tm * now2 = localtime( & t2 );
std::cout << t2 << std::endl;
cout << (now->tm_year + 1900) << '-'
<< (now->tm_mon + 1) << '-'
<< now->tm_mday << ", "
<< now->tm_hour << ":" << now->tm_min << ":" << now->tm_sec
<< endl;
cout << (now2->tm_year + 1900) << '-'
<< (now2->tm_mon + 1) << '-'
<< now2->tm_mday << ", "
<< now2->tm_hour << ":" << now2->tm_min << ":" << now2->tm_sec
<< endl;
}
典型的输出是:
1320655946
1320655948
2011-11-7, 9:52:28
2011-11-7, 9:52:28
正如你所看到的,time_t
时间戳是正确的,但当地时间把一切搞乱了。
我的问题是:如何将时间戳转换为类型time_t
进入人类可读的时代?
如果您担心重入localtime
and gmtime
, 有localtime_r
and gmtime_r
它可以处理多个呼叫。
当需要根据自己的喜好格式化时间时,请检查该函数strftime
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)