Linux C判断日期格式是否合法
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判断日期格式是否合法的更多相关文章
- Java中用正则表达式判断日期格式是否正确
1.Java中用正则表达式判断日期格式是否正确 DateType.java: /** * @Title:DateType.java * @Package:com.you.dao * @Descript ...
- PHP校验日期格式是否合法
在后端开发中,我们常常需要校验前端传入参数的合法性,如果是校验日期参数,我们可以通过下面的方法来校验: /** * 校验日期格式是否合法 * @param string $date * @param ...
- .net 判断日期格式yyyy-MM-dd hh:MM:ss的正则表达式
加上引用: using System.Text.RegularExpressions; /// <summary> /// 检查字符串是否是日期格式 /// </sum ...
- js判断日期格式(YYYYMM)
function datepanduan(obj){ var date = document.getElementById(obj.id).value; var reg = /^\b[1-3]\d{3 ...
- js正则判断日期
//****************************************************************************// Function ID : Commo ...
- js常规日期格式处理、月历渲染、倒计时函数
日期格式处理在前端的日常任务中非常常见,但是为此引入monent.js这样的类库又会显得有点臃肿,毕竟我们一个特定的项目中,并不需要monent.js那么全的涵盖范围.另外,如果现在公司让你自己手写一 ...
- Java判断字符串是否符合yyyyMMdd日期格式
Java判断字符串是否符合yyyyMMdd日期格式 代码: /** * 判断参数的格式是否为“yyyyMMdd”格式的合法日期字符串 * */ public static boolean isVali ...
- C# 判断字符串是否为日期格式
判断字符串内容是否为日期格式,并返回一个日期变量 string str; DateTime dtTime; if (DateTime.TryParse(str, out dtTime)) { //st ...
- JAVA 判断一个字符串是不是一个合法的日期格式
原文:http://www.cnblogs.com/xdp-gacl/p/3548307.html 最近开发公司的项目,一直找不到合适的正则表达式可以判断一个字符串是否可以转成日期,今天发现可以采用S ...
随机推荐
- 反编译工具 使用.NET JustDecompile来反编译你的程序代码
原文地址:http://www.it165.net/pro/html/201310/7383.html 前言 在项目的进行中有时会碰到需要去了解由第三方所开发的程序代码或者因为年久已经遗失原始码的程序 ...
- bzoj2730 [HNOI2012]矿场搭建 (UVAlive5135 Mining Your Own Business)
2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1147 Solved: 528[Submit][Statu ...
- 终于有人把O2O、C2C、B2B、B2C的区别讲透了
一.O2O.C2C.B2B.B2C的区别在哪里? o2o 是 online to offline 分为四种运营模式 1.online to offline 是线上交易到线下消费体验 2.offline ...
- maven项目中找不到Maven Dependencies解决办法
用eclipse创建maven项目后,在Deployment Assembly中通过Add...->Java Build Path Entries导入Maven Dependencies时,发现 ...
- python 查看文件夹权限组和用OS模块操作文件夹
@建议操作server服务器文件夹时可以映射网络驱动盘 import win32securityimport ntsecuritycon as con FILENAME = r'D:\tmp\acc_ ...
- ubuntu14.04 安装
summary: a). the way in the internet just a sugestion, I must to do it in my own hands, yes ! just ...
- Unity3D AssentStore 下载的package存放目录(WinXP,Win8,Mac OS X)
网上找到如下: Windows 8,C:\Users\<你的用户名>\AppData\Roaming\Unity\Asset Store Mac OS X,~/Library/Unity/ ...
- Android 6.0 反射 newInstance
Android 6.0 从预览版发布到现在已经快一年的时间了,然而市场占有率还是低的可怜,国内更不用说.随着三星.华为.小米开始升级至6.0 ,以及上半年各厂商新机逐渐发布,6.0的市场占有率必将迎来 ...
- js:jquery multiSelect 多选下拉框实例
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 大数据笔记06:大数据之Hadoop的HDFS(文件的读写操作)
1. 首先我们看一看文件读取: (1)客户端(java程序.命令行等等)向NameNode发送文件读取请求,请求中包含文件名和文件路径,让NameNode查询元数据. (2)接着,NameNode返回 ...