用C ++获取Unix时间戳

| 如何在C ++中获得
uint
Unix时间戳?我已经搜索了一下,似乎大多数方法都在寻找更复杂的方法来表示时间。我不能只把它当成get0ѭ吗?     
已邀请:
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\";
}
    
#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;
}
    
最常见的建议是错误的,您不能仅仅依靠
time()
。这用于相对计时:ISO C ++未指定
1970-01-01T00:00Z
time_t(0)
更糟糕的是,您也无法轻易地弄清楚。当然,您可以找到
time_t(0)
gmtime
的日历日期,但是如果that10ѭ会怎么办?
1970-01-01T00:00Z
2000-01-01T00:00Z
之间有多少秒?由于leap秒,它肯定不是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转换为秒 我还不知道Windows上的std :: time()返回什么(;-))     
由于这是google上的第一个结果,并且尚无C ++ 11答案,因此以下是使用std :: chrono的方法:
    #include <chrono>

    ...

    using namespace std::chrono;
    int64_t timestamp = duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();
请注意,此答案不能保证纪元是1970年1月1日,但实际上很有可能是。     
我创建了具有更多信息的全局定义:
#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
将这些行放在头文件中。我发现这对于调试等非常有用。     

要回复问题请先登录注册