显示今天的日期

Displaying today's date

本文关键字:日期 今天 显示      更新时间:2023-10-16

在我的程序中,我试图以天//月//年的布局显示今天的日期。我尝试过使用许多不同的方法,但我不断收到关于不安全使用cTime的错误。

有没有一种简单的方法可以让我的程序显示日期:

time_t t = time(0);   // get time now
struct tm * now = localtime( & t );
cout << (now->tm_year + 1900) << '-' 
     << (now->tm_mon + 1) << '-'
     <<  now->tm_mday
     << endl;

我一直得到"localtime':这个函数或变量可能不安全。请考虑使用localtime_s。"所以我做了,现在我得到了"localtime_s":函数不接受1个参数

localtime_s是一个特定于Microsoft的函数,与C标准函数相似,但参数略有不同,不太容易出错。看见http://msdn.microsoft.com/en-us/library/a442x3ye.aspx了解更多信息。

也就是说,如果您使用C++,那么最好使用C++标准库中chrono部分的函数。它们更易于使用且安全:http://en.cppreference.com/w/cpp/chrono

不幸的是,从time_t到格式化文本的函数的标准定义似乎都存在一些潜在的安全问题,尤其是在多线程程序中。这让您可以在选择供应商特定的路线还是为了便携性而失去安全性之间做出选择。

Microsoft特定路线:

localtime_s的详细信息可在此处获取:http://msdn.microsoft.com/en-us/library/a442x3ye%28v=vs.110%29.aspx

之后类似的东西应该在视觉工作室2012没有警告:

#include <ctime>
#include <iostream>
using namespace std;
int main() {
    time_t t = time(0);   // get time now
    struct tm now;
    localtime_s(&now, &t);
    cout << (now->tm_year + 1900) << '-' 
         << (now->tm_mon + 1) << '-'
         <<  now->tm_mday
         << endl;
}

但是localtime_s是微软特有的,所以使用它会限制代码的可移植性。

符合标准但不太安全的路线:

如果你更喜欢符合标准而不是更安全的版本,你可以使用你代码的原始版本,但在文件顶部添加以下内容:

#define _CRT_SECURE_NO_WARNINGS