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 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(¤t_time); timeinfo = localtime(¤t_time); string date = asctime(timeinfo); |
标准和跨平台的方式是使用
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); } |