如何构造这个时间结构体
时间: 2024-02-19 21:58:36 浏览: 68
在C/C++中,可以使用`struct tm`来表示时间,它包含以下成员变量:
```c++
int tm_sec; // 秒,范围为[0,59]
int tm_min; // 分,范围为[0,59]
int tm_hour; // 小时,范围为[0,23]
int tm_mday; // 一个月中的第几天,范围为[1,31]
int tm_mon; // 月份,从1月开始计数,范围为[0,11]
int tm_year; // 年份,从1900年开始计数
int tm_wday; // 一周中的第几天,从星期日开始计数,范围为[0,6]
int tm_yday; // 一年中的第几天,范围为[0,365]
int tm_isdst; // 是否为夏令时,1表示是,0表示否,-1表示未知
```
您可以通过手动解析时间字符串,逐个设置`struct tm`的成员变量来构造时间结构体。示例代码如下:
```c++
#include <iostream>
#include <cstring>
#include <ctime>
int main()
{
std::string str = "2022-01-01 00:00:00";
struct tm timeinfo = {0};
// 解析年月日
std::sscanf(str.c_str(), "%d-%d-%d %d:%d:%d", &timeinfo.tm_year, &timeinfo.tm_mon, &timeinfo.tm_mday, &timeinfo.tm_hour, &timeinfo.tm_min, &timeinfo.tm_sec);
timeinfo.tm_year -= 1900; // 年份从1900年开始计数,需要减去1900
timeinfo.tm_mon -= 1; // 月份从0开始计数,需要减去1
// 计算星期几和一年中的第几天
std::mktime(&timeinfo);
std::cout << "Year: " << timeinfo.tm_year + 1900 << std::endl;
std::cout << "Month: " << timeinfo.tm_mon + 1 << std::endl;
std::cout << "Day: " << timeinfo.tm_mday << std::endl;
std::cout << "Hour: " << timeinfo.tm_hour << std::endl;
std::cout << "Minute: " << timeinfo.tm_min << std::endl;
std::cout << "Second: " << timeinfo.tm_sec << std::endl;
return 0;
}
```
此代码将时间字符串"2022-01-01 00:00:00"解析为一个`struct tm`对象,并将结果输出到控制台。注意,该示例代码中只解析了年月日时分秒这几个信息,如果需要解析更多的时间信息,需要根据时间字符串的格式进行相应的修改。
阅读全文