【问题标题】:c++ 11 How can I acquire the system time?c++ 11 如何获取系统时间?
【发布时间】:2019-03-20 13:49:38
【问题描述】:
#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,我将不胜感激。

【问题讨论】:

标签: c++ time


【解决方案1】:

这在 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 更改为 chrono::zoned_time 来移植到 C++20。如果你有 C++17,今天可以将date::make_zoned 更改为date::zoned_time(需要 C++17 模板推导指南)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多