700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > linux c显示日期 Linux C判断日期格式是否合法

linux c显示日期 Linux C判断日期格式是否合法

时间:2021-12-23 03:36:51

相关推荐

linux c显示日期 Linux C判断日期格式是否合法

#include // strlen() , strncpy()

#include // isdigit()

#include // atoi()

#include

/*有效格式

-01-01 01:01:01

/11/11 11:11:11

*/

int main()

{

int isValidDate(const char* str)

{

// 检查日期长度

const int LEN = 19; // 有效格式长度都为19

int len = strlen(str);

if(LEN != len)

return 0;

// 检查年份是否在[1900, 2099]

char year_str[5] = { 0 };

strncpy(year_str, str, 4);

int year = atoi(year_str); // 年份转换为数字

if(year < 1900 || 2099 < year)

return 0;

// 检查月份和日期还有时间是否合乎逻辑

char month_str[3] = { 0 }, day_str[3] = { 0 } , hour_str[3] = { 0 } , minute_str[3] = { 0 }, second_str[3] = { 0 } ;

strncpy(month_str, str + 5, 2); // 抽取月份字符串

strncpy(day_str, str + 8, 2); // 抽取日期字符串

strncpy(hour_str, str + 11, 2); // 抽取小时字符串

strncpy(minute_str, str + 14, 2); // 抽取分钟字符串

strncpy(second_str, str + 17, 2); // 抽取秒钟字符串

int month = atoi(month_str); // 月份转换为数字

int day = atoi(day_str); // 日期转换为数字

int hour = atoi(hour_str); // 小时转换为数字

int minute = atoi(minute_str); // 分钟转换为数字

int second = atoi(second_str); // 秒钟转换为数字

if( (hour > 23 || hour < 0) || (minute > 59 || minute < 0) || (second > 59 || second < 0) ) // 判断小时,分钟,秒钟是否合法

return 0;

switch(month)

{

case 1: case 3: case 5: case 7: case 8: case 10: case 12: /*31天*/

return 0 < day && day < 32;

case 4: case 6: case 9: case 11: /*30天*/

return 0 < day && day < 31;

case 2: /*2月份比较特殊,闰年: 29天,平年: 28天*/

{

int leap = (0 == year % 4 && 0 != year % 100) || (0 == year % 400);

return (1 == leap && (0 < day && day < 30)) || (0 == leap && (0 < day && day < 29));

}

default: return 0;

}

}

const char* str1 = "-10-10 24:10:10";

const char* str2 = "-12-01 23:60:23";

const char* str3 = "/02/31 01:11:53";

const char* str4 = "2100/11/11 01:11:11";

const char* str5 = "/11/11 01:11:11";

const char* str6 = "209905-9";

const char* str7 = "20000229";

printf(isValidDate(str1) ? "valid\n" : "invalid\n");

printf(isValidDate(str2) ? "valid\n" : "invalid\n");

printf(isValidDate(str3) ? "valid\n" : "invalid\n");

printf(isValidDate(str4) ? "valid\n" : "invalid\n");

printf(isValidDate(str5) ? "valid\n" : "invalid\n");

printf(isValidDate(str6) ? "valid\n" : "invalid\n");

printf(isValidDate(str7) ? "valid\n" : "invalid\n");

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。