我的目的
判断日期格式为yyyymmdd的日期列表是否连续,如20220313与20220314是否为连续两天。
关于ctime库
时间常见的有两种存储方式: time_t:
整数类型,用来存储从1970年到现在经过了多少秒 tm:
结构类型,把日期和时间以C结构体的形式保存,tm结构的定义如下:
1
2
3
4
5
6
7
8
9
10
11
12struct tm
{
int tm_sec; // 秒,正常范围从0到59,但允许至61
int tm_min; // 分,范围从0到59
int tm_hour; // 小时,范围从0到23
int tm_mday; // 一月中的第几天,范围从1到31
int tm_mon; // 月,范围从0到11
int tm_year; // 自1900年起的年数
int tm_wday; // 一周中的第几天,范围从0到6,从星期日算起
int tm_yday; // 一年中的第几天,范围从0到365,从1月1日算起
int tm_isdst; // 夏令时
};
Function
time_t time(time_t* t); //取得从1970年1月1日至今的秒数
char asctime(const struct tm timeptr); //将结构中的信息转换为真实世界的时间,以字符串的形式显示
char ctime(const time_t timep); //将timep转换为真是世界的时间,以字符串显示
struct tm* gmtime(const time_t* timep); //将time_t表示的时间转换为没有经过时区转换的UTC时间,是一个struct tm结构指针
struct tm* localtime(const time_t* timep); //和gmtime类似,但是它是经过时区转换的时间
time_t mktime(struct tm* timeptr); //将struct tm 结构的时间转换为从1970年至今的秒数
Code
将string转化为struct tm
1 | int main() |
输出 1
122-2-11
1
2
3
4
5
6
7
8
9
10
11
12
13int main()
{
string date = "20220311";
struct tm mytm;
memset(&mytm, 0, sizeof(mytm));
sscanf(date.c_str(), "%4d%2d%2d", &mytm.tm_year, &mytm.tm_mon, &mytm.tm_mday);
mytm.tm_year -= 1900;
mytm.tm_mon--;
cout << mytm.tm_year << "-" << mytm.tm_mon << "-" << mytm.tm_mday << endl;
cout << mktime(&mytm) << endl;
}1
2122-2-11
1646928000
检查是否连续(总代码)
1 |
|
输出 1
1
结尾
最后说说最近的心情,过两天就要出复试线了,求求复试踩线求求复试踩线求求复试踩线(;´д`)ゞ