用户生日存放在wstrng中,将生日的年份去掉,读取今天的日期,判断今天是否是用户生日 C++,不使用localtime() vs2022
时间: 2024-02-23 15:01:57 浏览: 33
可以使用C++11的chrono库和locale库来解决这个问题。
首先,需要用到chrono库中的system_clock和time_point函数,来获取当前系统时间和转换为时间点。
然后,将用户生日存放在一个wstring类型的变量中,使用wstring库中的substr函数来分离出月日。
最后,将分离出来的月日和当前系统时间的月日进行比较,如果相同,则说明今天是用户生日。
下面是一个简单的示例代码:
```c++
#include <iostream>
#include <chrono>
#include <string>
#include <locale>
using namespace std;
int main()
{
//获取当前系统时间
auto now = chrono::system_clock::now();
time_t now_t = chrono::system_clock::to_time_t(now);
tm* local_time = gmtime(&now_t);
wstring user_birthday = L"1990-09-01";
wstring birthday_month_day = user_birthday.substr(5, 5);
//将当前系统时间转换成wstring
locale loc("");
wstring now_month_day = use_facet<time_put<wchar_t>>(loc).put(wcout, wcout, L' ', local_time, L" %m-%d").str();
if (now_month_day == birthday_month_day)
{
cout << "Happy birthday!" << endl;
}
else
{
cout << "Today is not your birthday." << endl;
}
return 0;
}
```
需要注意的是,因为不使用localtime函数,所以需要使用gmtime函数将time_t类型的当前系统时间转换为tm结构体类型的UTC时间。
同时,在将当前系统时间转换成wstring时,需要使用locale库中的time_put类的put函数来进行转换。
阅读全文