如何在C ++中获取当前日期?


How do I get the current date in C++?

我一直试图用C ++获取当前日期一段时间,我无法弄清楚我做错了什么。 我查看了几个站点和我实现的所有解决方案我得到一个错误,上面写着"这个函数或变量可能不安全。 请考虑使用localtime_s。"我尝试了这里找到的几个解决方案(包括下面的解决方案),但我无法使用它们。 我究竟做错了什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <iomanip>
#include <string>
#include <ctime>

using namespace std;

int main()
{

    const int SALARY = 18;
    const int COMMISSION = .08;
    const int BONUS = .03;

    int monthlySales;
    int appointmentNumber;

    time_t t = time(0);   // get time now
    struct tm * now = localtime(&t);

    string name;


//this is where the user adds their name and date
    cout <<"Please enter the sales representative's name:";
    cin >> name;
    cout <<"Please enter the number of appointments:";
    cin >> appointmentNumber;
    cout <<"Please enter the amount of sales for the month: $";
    cin >> monthlySales;

//clear screen and execute code
    system("cls");

    cout << setfill(' ');
    cout <<"Sales Representative:" << name << endl;
    cout <<"Pay Date:" << (now->tm_mon + 1) <<"" << now->tm_mday <<"" << (now->tm_year + 1900) << endl;
    cout <<"Work Count:" << appointmentNumber <<"Sale Amount"
        << monthlySales << endl;

        system("pause");

    return 0;
}


我是这样做的:

1
2
3
4
5
6
7
8
9
10
#include"date/tz.h"
#include <iostream>

int
main()
{
    using namespace std::chrono;
    std::cout << date::make_zoned(date::current_zone(), system_clock::now()) << '
'
;
}

只为我输出:

1
2016-10-18 10:39:10.526768 EDT

我使用这个C ++ 11/14便携式免费开源库。它是线程安全的。它基于。它类型安全且易于使用。如果您需要更多功能,此库将执行此操作。

  • 在另一个时区获取当地时间
  • 将本地时间直接从一个时区转换为另一个时区。
  • 在时间计算中考虑闰秒。
  • 以精确的方式流出/流时间戳往返,不丢失信息。
  • 在所有时区搜索属性(例如缩写或偏移)。

该库正在向C ++标准委员会提出,在此草拟。


您可以尝试下面的代码和说明。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <ctime>

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;
  char buffer[80];

  time (&rawtime);
  timeinfo = localtime(&rawtime);

  strftime(buffer,80,"%d-%m-%Y %I:%M:%S",timeinfo);
  std::string str(buffer);

  std::cout << str;

  return 0;
}

功能

time_t time(time_t * timer);

函数返回此值,如果参数不是空指针,它还将此值设置为timer指向的对象。

参数

  • 计时器
    指向time_t类型的对象的指针,其中存储了时间值。如果不需要,您也可以传递空指针

回报价值

当前日历时间作为time_t对象。如果函数无法检索日历时间,则返回值-1。


您可能会收到此警告,因为localtime()不是线程安全的。调用此函数的两个实例可能会导致一些差异。

[...] localtime returns a pointer to a static buffer (std::tm*).
Another thread can call the function and the static buffer could be
overwritten before the first thread has finished reading the content
of the struct std::tm*.


我非常感谢你及时回复。最终我能够使用Heemanshu Bhalla的变化作出回应。我将'_CRT_SECURE_NO_WARNINGS'添加到预处理器定义中,然后我将Heemanshu的代码更改为以下代码。这符合我的需要。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <ctime>
#include <string>

using namespace std;

int main()
{
    time_t rawtime;
    struct tm * timeinfo;
    char buffer[80];

    time(&rawtime);
    timeinfo = localtime(&rawtime);

    strftime(buffer, 80,"%m/%d/%Y", timeinfo);
    string str(buffer);

    cout << str << endl;

    system("PAUSE");

    return 0;
}

这是另一种可行的方法:

1
2
3
4
5
time_t current_time;
struct tm *timeinfo;
time(&current_time);
timeinfo = localtime(&current_time);
string date = asctime(timeinfo);


标准和跨平台的方式是使用chrono

1
2
3
4
5
6
7
#include <iostream>
#include <chrono>

int main(){
    std::time_t now_time = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
    std::cout <<"Now:" << std::ctime(&now_time);
}