Linux C判斷日期格式是否合法

來源:互聯網
上載者:User

標籤:

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判斷日期格式是否合法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.