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:01
2013/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判断日期格式是否合法的更多相关文章

  1. Java中用正则表达式判断日期格式是否正确

    1.Java中用正则表达式判断日期格式是否正确 DateType.java: /** * @Title:DateType.java * @Package:com.you.dao * @Descript ...

  2. PHP校验日期格式是否合法

    在后端开发中,我们常常需要校验前端传入参数的合法性,如果是校验日期参数,我们可以通过下面的方法来校验: /** * 校验日期格式是否合法 * @param string $date * @param ...

  3. .net 判断日期格式yyyy-MM-dd hh:MM:ss的正则表达式

    加上引用: using System.Text.RegularExpressions; /// <summary> /// 检查字符串是否是日期格式        /// </sum ...

  4. js判断日期格式(YYYYMM)

    function datepanduan(obj){ var date = document.getElementById(obj.id).value; var reg = /^\b[1-3]\d{3 ...

  5. js正则判断日期

    //****************************************************************************// Function ID : Commo ...

  6. js常规日期格式处理、月历渲染、倒计时函数

    日期格式处理在前端的日常任务中非常常见,但是为此引入monent.js这样的类库又会显得有点臃肿,毕竟我们一个特定的项目中,并不需要monent.js那么全的涵盖范围.另外,如果现在公司让你自己手写一 ...

  7. Java判断字符串是否符合yyyyMMdd日期格式

    Java判断字符串是否符合yyyyMMdd日期格式 代码: /** * 判断参数的格式是否为“yyyyMMdd”格式的合法日期字符串 * */ public static boolean isVali ...

  8. C# 判断字符串是否为日期格式

    判断字符串内容是否为日期格式,并返回一个日期变量 string str; DateTime dtTime; if (DateTime.TryParse(str, out dtTime)) { //st ...

  9. JAVA 判断一个字符串是不是一个合法的日期格式

    原文:http://www.cnblogs.com/xdp-gacl/p/3548307.html 最近开发公司的项目,一直找不到合适的正则表达式可以判断一个字符串是否可以转成日期,今天发现可以采用S ...

随机推荐

  1. day7_subprocess模块和面向对象,反射

    常用subprocess方法示例 #执行命令,返回命令执行状态 , 0 or 非0>>> retcode = subprocess.call(["ls", &qu ...

  2. HDFS

    1.HDFS shell 1.0查看帮助 hadoop fs -help <cmd> 1.1上传 hadoop fs -put <linux上文件> <hdfs上的路径& ...

  3. java并发:同步容器&amp;并发容器

    第一节 同步容器.并发容器 1.简述同步容器与并发容器 在Java并发编程中,经常听到同步容器.并发容器之说,那什么是同步容器与并发容器呢?同步容器可以简单地理解为通过synchronized来实现同 ...

  4. Android 手势水平监听判断

    package com.zihao.ui; import com.zihao.R; import android.os.Bundle; import android.app.Activity; imp ...

  5. 【Android UI设计与开发】2.引导界面(二)使用ViewPager实现欢迎引导页面

    1.实现的效果 2.编码前的准备工作 ViewPager是Android3.0之后提供的新特性,所以要想让你的应用向下兼容就必须要android-support-v4.jar这个包的支持,这是一个来自 ...

  6. oracle odbc配置

    oracle odbc配置 Win7 64位 下安装oracle odbc 不能使用控制面板中 “管理工具”->“数据源(OBDC)”中安装数据源. 而要在“ 运行” 中输入  C:\Windo ...

  7. [改善Java代码]避开基本类型数组转换列表陷阱

    开发中经常用到Arrays和Collections这两个工具类. 在数组和列表之间进行切换.非常方便.但是也会遇到一些问题. 看代码: import java.util.Arrays; import ...

  8. java 正则

    ava - 正则表达式 - Pattern - Matcher 2013-08-21 14:35 3325人阅读 评论(0) 收藏 举报  分类: JavaSE(30)  版权声明:本文为博主原创文章 ...

  9. 随手一记,maven打包

    <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-depen ...

  10. 死磕 java集合之TreeSet源码分析

    问题 (1)TreeSet真的是使用TreeMap来存储元素的吗? (2)TreeSet是有序的吗? (3)TreeSet和LinkedHashSet有何不同? 简介 TreeSet底层是采用Tree ...