c ++ 11如何获取系统时间?

时间:2018-10-16 05:31:36

标签: c++ time

#include <chrono>
#include <string>
#include <iostream>
#include <ctime>

using namespace std;

int main() {
    chrono::time_point<chrono::system_clock> end;
    end = chrono::system_clock::now();
    time_t end_time = chrono::system_clock::to_time_t(end);
    cout << ctime(&end_time) << endl;
    system("PAUSE");
    return 0;
} 

在C ++ 11中,如何获取系统时间?运行此代码时,出现错误

  

代码C4996'ctime':此函数或变量可能不安全。

此外,如果有人可以向我解释如何进行调整以使时间的格式类似于month/day/year Hour:Minute,我将不胜感激。

1 个答案:

答案 0 :(得分:4)

这在C ++ 20中变得更加容易。在C ++ 11中,您可以使用Howard Hinnant's date/time library从今天开始使用C ++ 20语法:

#include "date/date.h"
#include <chrono>
#include <iostream>

int
main()
{
    using namespace std;
    cout << date::format("%m/%d/%Y %H:%M\n", chrono::system_clock::now());
}

这将以所需的格式输出系统时间。您的系统保留UTC时间,而不是本地时间。这只是为我输出:

10/16/2018 13:32

如果不需要本地时间/时区支持,则这是一个单独的标头,仅标头的库。只要加入date/date.h,您就可以开始了。如果需要时区支持,则在同一链接上还有一个额外的时区库,但它不是仅标头。它有一个必须编译的源tz.cpp。可以这样使用:

#include "date/tz.h"
#include <chrono>
#include <iostream>

int
main()
{
    using namespace std;
    cout << date::format("%m/%d/%Y %H:%M\n",
            date::make_zoned(date::current_zone(), chrono::system_clock::now()));
}

这对我来说将输出更改为:

10/16/2018 09:32

通过删除#include "date/...",将date::format更改为chrono::format,并将date::make_zoned更改为{{1},此代码(均为示例)将移植到C ++ 20 }。如果您使用的是C ++ 17,则可以立即将chrono::zoned_time更改为date::make_zoned(需要C ++ 17模板推导指南)。