用C ++获取Unix时间戳

我如何获得在C ++ uint unix时间戳? 我google了一下,似乎大多数方法正在寻找更复杂的方式来表示时间。 我不能把它作为一个uint吗?

time()是最简单的函数 – 自Epoch以来的秒数。 Linux的manpage 在这里 。

上面链接的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"; } 
 #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; } 

最常见的build议是错误的,你不能只依靠time() 。 这是用于相对时间:ISO C ++不指定1970-01-01T00:00Ztime_t(0)

更糟糕的是,你也不能轻易搞清楚。 当然,你可以用gmtimefindtime_t(0)的日历date,但是如果是2000-01-01T00:00Z你打算怎么办? 1970-01-01T00:00Z2000-01-01T00:00Z之间有几秒钟? 由于闰秒,它当然不是60的倍数。

 #include <iostream> #include <sys/time.h> using namespace std; int main () { unsigned long int sec= time(NULL); cout<<sec<<endl; } 

Windows使用不同的纪元和时间单位:请参阅在Unix / Linux中将Windows Filetime转换为第二个

什么std :: time()在Windows上返回是(至今)我不知道(;-))

我创build了一个包含更多信息的全局定义:

 #include <iostream> #include <ctime> #include <iomanip> #define INFO std::cout << std::put_time(std::localtime(&time_now), "%y-%m-%d %OH:%OM:%OS") << " [INFO] " << __FILE__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") >> " #define ERROR std::cout << std::put_time(std::localtime(&time_now), "%y-%m-%d %OH:%OM:%OS") << " [ERROR] " << __FILE__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") >> " static std::time_t time_now = std::time(nullptr); 

像这样使用它:

 INFO << "Hello world" << std::endl; ERROR << "Goodbye world" << std::endl; 

示例输出:

 16-06-23 21:33:19 [INFO] src/main.cpp(main:6) >> Hello world 16-06-23 21:33:19 [ERROR] src/main.cpp(main:7) >> Goodbye world 

把这些行放在你的头文件中。 我觉得这对debugging非常有用