#include // strlen() , strncpy()

#include // isdigit()

#include // atoi()

#include

/*有效格式

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显示日期,Linux C判断日期格式是否合法相关推荐

  1. 正则表达式判断手机号码格式是否合法

    利用正则表达式判断手机号码格式是否合法 支持移动,联通,电信号码. #pragma mark 手机合法验证 +(BOOL)isMobileNumber:(NSString *)mobileNum {/ ...

  2. python判断日期_python如何判断日期的合法性?

    判断日期的合法性,有两层含义,一是日期格式是否合法,二是格式合法后,其所表示的实际的那一天,是否真实存在!在python中,做这个合法性的判断,so easy!~~ 我们需要用到datetime模块中 ...

  3. linux中显示进程,linux中怎么显示所有进程

    Linuxlinux中显示所有进程下使用PS命令结合相关参数可以查看linux当前系统下的所有进程.那么linux中怎么显示所有进程呢?接下来大家跟着学习啦小编一起来了解一下的解决方法吧. linux ...

  4. linux tree显示乱码,Linux tree 命令乱码

    今天在执行Linux下的tree命令的时候,出现了乱码.上网查了一下说需要使用tree --charset ASCII,强制使用ASCII字符.这样确实可以输出正常了.但是我的环境里的LANG=US. ...

  5. linux文件显示程序,Linux下文件显示命令简介

    文件操作,但是目录操作我们也是一样的.因为在Linux中,一切皆文件,目录也是文件.只不过目录文件是的文件内容是里面的文件名列表. 下面这些内容主要针对文件的文件内容操作.对于目录文件的内容操作有专门 ...

  6. linux 桌面显示 kvm,Linux的桌面虚拟化技术KVM(五)——virsh常用命令

    (1).virsh常用命令 virsh list 查看已打开虚拟机列表 virsh list --all 查看所有虚拟机列表 virsh version 查看 virsh 版本号 virsh star ...

  7. linux top 显示swap,Linux top命令中的SWAP与DATA

    记得前面的一篇日志中提到过,Linux top命令中的SWAP是通过 VIRT – RSS计算出来的:但是SWAP真的就代表占用磁盘的SWAP的空间大小吗? 我们知道linux的内存使用是采用记账的方 ...

  8. linux ping 显示时间间隔,linux的ping命令设置时间间隔

    linux下ping命令可以设置每次ping的时间间隔.下面由秋天网 Qiutian.ZqNF.Com小编为大家整理了linux下ping命令设置时间间隔的相关知识,希望对大家有帮助! linux的p ...

  9. 查看linux不显示ip,linux系统查看IP地址,不显示IP地址或者只显示127.0.0.1

    LUA学习笔记三&#183;时间等操作系统库 1.构造时间 2.时间制定格式输出 3.计时器(闭包)os.difftime (t2, t1) 返回以秒计算的时刻 t1 到 t2 的差值. (这 ...

  10. linux 进程状态显示dl,Linux系统中的实时调度器DL调度器的原理是什么?详细概述...

    一.概述 实时系统是这样的一种计算系统:当事件发生后,它必须在确定的时间范围内做出响应.在实时系统中,产生正确的结果不仅依赖于系统正确的逻辑动作,而且依赖于逻辑动作的时序.换句话说,当系统收到某个请求 ...

最新文章

  1. 操作系统:基本分段存储管理方式
  2. tmux多窗口工具基本操作
  3. java界面 ppt_Java GUI图形用户界面 课件.ppt
  4. ssl提高组周六备考赛【2018.10.27】
  5. 4、第4次课 CSS代码第三节课20150923
  6. python数据模型和各种实用小技巧,保证让你更PYTHONIC
  7. B站韩顺平版Linux学习笔记(很全啊!)
  8. 几个LabVIEW软件欢迎页面
  9. Android8.1 MTK平台 SystemUI源码分析之 Notification流程
  10. 误删除数据恢复,试试这3个方法
  11. eclipse 缓解眼睛疲劳保护眼睛
  12. 机器学习-初级进阶(Thompson 抽样算法 )
  13. vue2 typescript 项目 如何引入antd -ui组件
  14. 外盘国际期货是否合法吗?为啥还有人做期货主账户?
  15. QPainter使用QImage做画布时花屏
  16. DVWA-Reflected XSS
  17. Taylor formulation
  18. 完美世界2017/9/26笔试题
  19. 民间各类恐怖请仙大法(上)(转帖)
  20. 一个简单存储过程的测试

热门文章

  1. 享元模式 - 结构型模式
  2. 《架构探险——从零开始写Java Web框架》这书不错,能看懂的入门书
  3. DELPHI设置枚举类型size
  4. 计算方法之迭代法求方程根
  5. 是用Entity.Save(),还是用DAL.Save(Entity e)
  6. Win7中IIS7.0安装及ASP环境配置
  7. Lachesis Shield 设计上的抉择
  8. Spring注解配置工作原理源码解析
  9. vue --- 全局配置过滤函数,使用moment函数来格式化时间
  10. html5 --- 使用canvas画一个渐变矩形