Ton*_*roy 62
time()是最简单的功能 - 自大纪元以来的秒数.Linux手册页在这里.
上面链接的cppreference页面给出了这个例子:
#include <ctime>
#include <iostream>
int main()
{
std::time_t result = std::time(nullptr);
std::cout << std::asctime(std::localtime(&result))
<< result << " seconds since the Epoch\n";
}
Run Code Online (Sandbox Code Playgroud)
wil*_*ell 36
#include<iostream>
#include<ctime>
int main()
{
std::time_t t = std::time(0); // t is an integer type
std::cout << t << " seconds since 01-Jan-1970\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
MSa*_*ers 15
最常见的建议是错误的,你不能只依靠time().这是用于相对时间:ISO C++没有指定1970-01-01T00:00Z是time_t(0)
更糟糕的是,你也不能轻易搞清楚.当然,你可以找到的日历日期time_t(0)用gmtime,但你有什么打算做的,如果这是2000-01-01T00:00Z?1970-01-01T00:00Z和之间有多少秒2000-01-01T00:00Z?由于闰秒,它肯定不是60的倍数.
由于这是 google 上的第一个结果,而且还没有 C++20 答案,这里是如何使用 std::chrono 来做到这一点:
#include <chrono>
//...
using namespace std::chrono;
int64_t timestamp = duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();
Run Code Online (Sandbox Code Playgroud)
在 20 之前的 C++ 版本中,system_clock 的纪元是 Unix 纪元是事实上的约定,但它没有标准化。如果您使用的不是 C++20,请自担风险。
#include <iostream>
#include <sys/time.h>
using namespace std;
int main ()
{
unsigned long int sec= time(NULL);
cout<<sec<<endl;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
Windows 使用不同的纪元和时间单位:参见 Convert Windows Filetime to second in Unix/Linux
我不知道 std::time() 在 Windows 上返回的内容(迄今为止)(;-))
我创建了一个包含更多信息的全局定义:
#include <iostream>
#include <ctime>
#include <iomanip>
#define __FILENAME__ (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__) // only show filename and not it's path (less clutter)
#define INFO std::cout << std::put_time(std::localtime(&time_now), "%y-%m-%d %OH:%OM:%OS") << " [INFO] " << __FILENAME__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") >> "
#define ERROR std::cout << std::put_time(std::localtime(&time_now), "%y-%m-%d %OH:%OM:%OS") << " [ERROR] " << __FILENAME__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") >> "
static std::time_t time_now = std::time(nullptr);
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
INFO << "Hello world" << std::endl;
ERROR << "Goodbye world" << std::endl;
Run Code Online (Sandbox Code Playgroud)
示例输出:
16-06-23 21:33:19 [INFO] main.cpp(main:6) >> Hello world
16-06-23 21:33:19 [ERROR] main.cpp(main:7) >> Goodbye world
Run Code Online (Sandbox Code Playgroud)
将这些行放在您的头文件中。我发现这对于调试等非常有用。
| 归档时间: |
|
| 查看次数: |
165107 次 |
| 最近记录: |