標籤:
Title:Linux C判斷日期格式是否合法 --2013-10-11 11:54
#include <string.h> // strlen() , strncpy()#include <ctype.h> // isdigit()#include <stdlib.h> // atoi()#include <stdio.h>/*有效格式2013-01-01 01:01:012013/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 = "2013-10-10 24:10:10"; const char* str2 = "2014-12-01 23:60:23"; const char* str3 = "2013/02/31 01:11:53"; const char* str4 = "2100/11/11 01:11:11"; const char* str5 = "2013/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"); }
Linux C判斷日期格式是否合法