繁体   English   中英

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

[英]c++ 11 How can I acquire the system 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格式设置时间,我将不胜感激。

在C ++ 20中,这变得更加容易。 在C ++ 11中,您可以使用Howard Hinnant的日期/时间库立即开始使用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更改为date::make_zoned chrono::format ,并将date::make_zoned更改为chrono::zoned_time date::make_zoned ,此代码(均为示例)将移植到C ++ 20。 如果您使用的是C ++ 17,则可以将date::make_zoned更改为date::zoned_time (需要C ++ 17模板推导指南)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM