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. 如何创建WIN服务

    sc create ServiceName binPath= "XXXX.exe" displayName= "中文xxxx"binpath和displayna ...

  2. Spring JDBC 随笔

    Spring 框架,借助 JdbcTemplate 类来简化 java 访问 database. 完成一个增查改删(CRUD)的基本功能,借助下面 5 个角色来共同来完成. 1. object cla ...

  3. Shopilex - 开源免费网店系统

    Shopilex - 开源免费网店系统 Shopilex是一套基于GPL开源协议的,MVC架构的开源电子商务网店系统,是目前中文领域里真正开源免费的网店系统.

  4. 【笔试&面试】C#的托管代码与非托管代码

    1. C#中的托管代码是什么? 答:托管代码(ManagedCode)实际上就是中间语言(IL)代码.代码编写完毕后进行编译,此时编译器把代码编译成中间语言(IL),而不是能直接在你的电脑上运行的机器 ...

  5. XCode7中不能使用http的临时配置解决办法

    先看看iOS9新特性中关于ATS的官方文档: App Transport Security App Transport Security (ATS) enforces best practices i ...

  6. linux —— 初探

    目录: linux 知识拓展 ubuntu 的安装 安装完成后做的那些事 1.linux 知识拓展 开源世界旅行手册:一个中文网站,根据<Ubuntu教程>而撰写的有趣的文档.作者说:“只 ...

  7. Android SHA1与Package获取方式

    获取应用包名 打开Android 应用工程的 AndroidManifest.xml配置文件,package 属性所对应的内容为应用包名. 如下图所示,红框中的内容: 获取 Sha1 值 开发模式(d ...

  8. TN2151:崩溃报告

    understanding and analyzing ios application crashreports 这个TN涉及了与崩溃相关的 内存耗尽信息,堆栈信息 以及 异常编号 等信息 内存耗尽 ...

  9. Mysql大小写敏感的问题 --转

    一.1 CREATE TABLE NAME(name VARCHAR(10)); 对这个表,缺省情况下,下面两个查询的结果是一样的: SELECT * FROM TABLE NAME WHERE na ...

  10. Target runtime Apache Tomcat v6.0 is not defined. phyy Unknown Faceted Project Problem

    Description Resource Path Location TypeTarget runtime Apache Tomcat v6.0 is not defined. phyy Unknow ...