#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
,我将不胜感激。
答案 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模板推导指南)。