显示今天的日期

时间:2013-12-12 22:38:23

标签: c++ date visual-studio-2012

在我的程序中,我试图在一天//月//布局中显示今天的日期。我尝试过使用很多不同的方法,但是我一直在不安全地使用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个参数

2 个答案:

答案 0 :(得分:2)

localtime_s是一个特定于Microsoft的函数,类似于C标准函数,但具有稍微不同的参数,不易出错。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/a442x3ye.aspx

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

答案 1 :(得分:1)

不幸的是,从time_t到格式文本的函数的标准定义似乎都存在一些潜在的安全问题,特别是在多线程程序中。这使您可以选择供应商特定的路线或放弃安全性以换取便携性。

Microsoft特定路线:

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

以下内容应该在visual studio 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