时间:2015-06-18 来源:

Linux下时间范围判断的程序流程及其C代码实现【编程语言】

一、概述 在实际的软件开发项目中web外包,经常会遇到需要判断时间范围的情况.例如,web外包某软件要在某段时间内执行对过期数据的清理,html前端制作在其它时间段不执行.为了体现程序的灵活性,div页面一般都是在配置文件中设置时间段的始末值,承接网页前端外包这样可根据软件的实际安装环境进行配置.本文介绍判断当前时间是否在配置的时间范围内的程序流程网页html切图排版,并给出了C代码实现.具体的需求描述如下: 在配置文件中按需配置某一开始时间和结束时间,网页html切图排版 please check! 8.当前时间不在配置时间范围内 设置配置文件如下:

> cat Config.ini [TIMEINFO] ; 开始时间 BeginTime=10:60 ; 结束时间 EndTime=12:00 运行程序,承接网页制作其结果为:

> cat Config.ini [TIMEINFO] ; 开始时间 BeginTime= ; 结束时间 EndTime=12:00 运行程序web外包, please check! 4.配置的开始时间值不是“HH:MM”的形式 设置配置文件如下:

> cat Config.ini [TIMEINFO] ; 开始时间 BeginTime=13:00 ; 结束时间 EndTime=12:00 运行程序网页切图制作,其结果为:

附录:完整的程序代码

4.异常考虑 在编写代码之前,网页切图制作我们不仅要确保正常功能的完整性div+css+js切图,还要考虑到一些异常流程.本示例程序中的异常流程主要包括: (1)如果配置文件中设置的时间值为空,网页重构报价该如何处理? (2)如果配置文件中设置的时间值不是“HH:MM”的形式承接网站前端,该如何处理? (3)如果配置文件中设置的起始时间值和结束时间值相同,承接网站前端该如何处理? (4)如果配置文件中设置的时间值不正确(如带有其它符号、超出规定范围等),该如何处理?

三、重要程序流程及异常考虑 1.从配置文件中读取各个配置项的值 该操作的流程具体请参见《Linux下配置文件读取操作流程及其C代码实现》(http://blog.csdn.net/zhouzhaoxiong1227/article/details/45563263)一文.

> cat Config.ini [TIMEINFO] ; 开始时间 BeginTime=12:00 ; 结束时间 EndTime=12:00 运行程序,psd切图html其结果为:

> cat Config.ini [TIMEINFO] ; 开始时间 BeginTime=11:0 ; 结束时间 EndTime=12:00 运行程序web外包,其结果为:

> cat Config.ini [TIMEINFO] ; 开始时间 BeginTime=10:-0 ; 结束时间 EndTime=12:00 运行程序,div切图排版其结果为:

> TimeSpan BeginTime: hour=14, minute=0 当前时间13点51分 不在 14点0分和16点0分范围内 五、总结 本文正文部分主要介绍了判断当前时间是否在配置的时间范围内的程序流程(完整的程序代码见附录),并给出了详细的测试过程.在实际的软件开发项目中,手机网页外包程序测试会花费大量的时间承接网站前端,但对于确保软件的质量很有必要. Linux操作系统具有免费、可靠、安全、稳定、多平台等特点,页面div重构基于Linux开发的软件种类是数不胜数.不管大家是否已踏上软件开发之路psd切图html, please check! 5.配置的起始时间值和结束时间值相同 设置配置文件如下:

四、程序编译及测试 利用filezilla软件将程序文件“TimeSpan.c”和配置文件“Config.ini”上传到Linux机器上web外包,执行“gcc -g -o TimeSpan TimeSpan.c”命令对程序进行编译,web外包生成“TimeSpan”文件. 下面网页切图制作,我们来对程序进行测试. 1.当前时间在配置时间范围内(配置的开始时间小于结束时间) 设置配置文件如下:

> cat Config.ini [TIMEINFO] ; 开始时间 BeginTime=08:00 ; 结束时间 EndTime=12:00 运行程序,div页面其结果为:

> TimeSpan BeginTime: hour=12, minute=0 BeginTime is the same as EndTime, minute=0; EndTime: hour=12, minute=0 当前时间11点18分 在 13点0分和12点0分范围内 3.配置的开始时间值为空 设置配置文件如下:

2.获取当前的系统时间 在本程序示例中,承接网页制作我们使用系统自带的gettimeofday和localtime函数来获取Linux机器的当前时间. (1)gettimeofday函数的定义为: int gettimeofday(struct timeval*tv, struct timezone *tz); 其中,web外包参数tv用于保存获取时间结果的结构体网页切图制作, minute=0; EndTime: hour=12, please check! 7.配置的起始时间值不正确(带有其它符号) 设置配置文件如下:

> cat Config.ini [TIMEINFO] ; 开始时间 BeginTime=14:00 ; 结束时间 EndTime=16:00 运行程序承接网站前端,其结果为:

3.判断时间范围 由于在配置文件中只设置了小时和分,承接网站前端因此在程序中只需要比较小时和分的大小即可.在这个流程中psd切图html,我们需要考虑到结束时间比开始时间小的情况,psd切图html也就是跨天的情况. 具体的处理流程参见附录中的程序完整代码.

二、算法流程图

/********************************************************************** * 版权所有 (C)2015, INT8 *pszTimeBuf); void CurrentTime(ClockStruc *ptTime); INT32 IsInTimeSpan(ClockStruc *pTimeNow, ClockStruc *pEndTime); void GetCompletePath(UINT8 *pszConfigFileName, UINT8 *pszSectionName, UINT8 *pszOutput, UINT8 *pszKeyName, UINT8 *pszOutput, UINT8 *pszConfigFileName); INT32 IsRightStr(UINT8 *pszStr); INT32 main(); /********************************************************************** * 功能描述:主函数 * 输入参数:无 * 输出参数:无 * 返 回 值:无 * 其它说明:无 * 修改日期 版本号 修改人 修改内容 * ------------------------------------------------------------------- * 20150617 V1.0 Zhou Zhaoxiong 创建 ***********************************************************************/ INT32 main() { INT8 szTimeBuf[50] = {0}; INT32 iRetVal = 0; ClockStruc tBeginTime = {0}; // 开始时间 ClockStruc tEndTime = {0}; // 结束时间 ClockStruc tTimeNow = {0}; // 当前时间 // 获取开始时间div+css+js切图, "BeginTime", szTimeBuf, "Config.ini"); if (strlen(szTimeBuf) != 5) // 时间串的长度必须为5位 { printf("The length of BeginTime is not 5, please check!\n"); return -1; } if (IsRightStr(szTimeBuf) != 0) // 必须是包含:的数字串,web外包 如果含有其它字符网页切图制作, please check!\n"); return -1; } iRetVal = GetTimeFromStr(&tBeginTime, szTimeBuf); if (iRetVal == -1) { return -1; } // 获取结束时间,网页重构报价 输入格式: HH:MM GetConfigFileStringValue("TIMEINFO", "", sizeof(szTimeBuf), please check!\n"); return -1; } if (IsRightStr(szTimeBuf) != 0) // 必须是包含:的数字串网页切图制作, 如果含有其它字符,网页切图制作 则不再执行后续流程 { printf("EndTime is not a right format string, szTimeBuf); if (iRetVal == -1) { return -1; } printf("BeginTime: hour=%d, minute=%d\n", tBeginTime.minute, tEndTime.minute); // 如果开始时间和结束时间一样网页切图制作, please check!\n"); return -1; } // 判断当前时间是否在配置的时间范围内 CurrentTime(&tTimeNow); iRetVal = IsInTimeSpan(&tTimeNow, &tEndTime); if (iRetVal == 0) { printf("当前时间%d点%d分 在 %d点%d分和%d点%d分范围内\n", tTimeNow.minute, tBeginTime.minute, tEndTime.minute); } else { printf("当前时间%d点%d分 不在 %d点%d分和%d点%d分范围内\n", tTimeNow.minute, tBeginTime.minute, tEndTime.minute); } return 0; // main函数执行成功返回0 } /********************************************************************** * 功能描述:从时间字符串中获取小时和分 * 输入参数:ptTime-时间结构体 pszTimeBuf-时间字符串 * 输出参数:无 * 返 回 值:0-成功 -1-失败 * 其它说明:无 * 修改日期 版本号 修改人 修改内容 * ------------------------------------------------------------------- * 20150617 V1.0 Zhou Zhaoxiong 创建 ***********************************************************************/ INT32 GetTimeFromStr(ClockStruc *ptTime, pszTimeBuf, ':'); // 获取:所在的位置 if (pFlag == NULL) { printf("GetTimeFromStr: the format of time in config file is wrong, 分的范围是0到59 if (ptTime->hour > 23 || ptTime->minute > 59) { printf("GetTimeFromStr: hour or minute in config file is out of range, NULL); dt = tp.tv_sec; tm1 = localtime(&dt); ptTime->Count10ms = tp.tv_usec / 10000; ptTime->year = (UINT16)(tm1->tm_year + 1900); ptTime->month = (UINT8)tm1->tm_mon + 1; ptTime->day = (UINT8)tm1->tm_mday; ptTime->hour = (UINT8)tm1->tm_hour; ptTime->minute = (UINT8)tm1->tm_min; ptTime->second = (UINT8)tm1->tm_sec; ptTime->week = (UINT8)tm1->tm_wday; if (ptTime->week == 0) // Sunday { ptTime->week = 7; } } /********************************************************************** * 功能描述:判断当前时间是否在配置的时间范围内 * 输入参数:pTime-时间结构体 * 输出参数:pTime-时间结构体 * 返 回 值:0-在范围内 -1-不在范围内 * 其它说明:无 * 修改日期 版本号 修改人 修改内容 * ------------------------------------------------------------------- * 20150617 V1.0 Zhou Zhaoxiong 创建 ***********************************************************************/ INT32 IsInTimeSpan(ClockStruc *pTimeNow, ClockStruc *pEndTime) { UINT8 iBegLessThanEnd = 0; // 1-配置的开始时间小于结束时间 0-配置的开始时间大于结束时间 if (pBeginTime->hour < pEndTime->hour || (pBeginTime->hour == pEndTime->hour && pBeginTime->minute <= pEndTime->minute)) { iBegLessThanEnd = 1; } else { iBegLessThanEnd = 0; } if (iBegLessThanEnd) // 开始时间小于结束时间 { if ((pTimeNow->hour > pBeginTime->hour || (pTimeNow->hour == pBeginTime->hour && pTimeNow->minute >= pBeginTime->minute)) && (pTimeNow->hour < pEndTime->hour || (pTimeNow->hour == pEndTime->hour && pTimeNow->minute <= pEndTime->minute))) { return 0; } else { return -1; } } else // 开始时间大于结束时间psd切图html, UINT8 *pszWholePath) { UINT8 *pszHomePath = NULL; UINT8 szWholePath[256] = {0}; // 先对输入参数进行异常判断 if (pszConfigFileName == NULL || pszWholePath == NULL) { printf("GetCompletePath: input parameter(s) is NULL!\n"); return; } pszHomePath = (UINT8 *)getenv("HOME"); // 获取当前用户所在的路径 if (pszHomePath == NULL) { printf("GetCompletePath: Can't find home path!\n"); return; } // 拼装配置文件路径 snprintf(szWholePath, "%s/zhouzx/TimeSpan/%s", pszConfigFileName); strncpy(pszWholePath, strlen(szWholePath)); } /********************************************************************** * 功能描述: 获取具体的字符串值 * 输入参数: fp-配置文件指针 pszSectionName-段名承接网站前端, 如: GENERAL pszKeyName-配置项名,承接网站前端 如: EmployeeName iOutputLen-输出缓存长度 * 输出参数: pszOutput-输出缓存 * 返 回 值: 无 * 其它说明: 无 * 修改日期 版本号 修改人 修改内容 * ------------------------------------------------------------------ * 20150617 V1.0 Zhou Zhaoxiong 创建 ********************************************************************/ void GetStringContentValue(FILE *fp, UINT8 *pszKeyName, UINT32 iOutputLen) { UINT8 szSectionName[100] = {0}; UINT8 szKeyName[100] = {0}; UINT8 szContentLine[256] = {0}; UINT8 szContentLineBak[256] = {0}; UINT32 iContentLineLen = 0; UINT32 iPositionFlag = 0; // 先对输入参数进行异常判断 if (fp == NULL || pszSectionName == NULL || pszKeyName == NULL || pszOutput == NULL) { printf("GetStringContentValue: input parameter(s) is NULL!\n"); return; } sprintf(szSectionName, pszSectionName); strcpy(szKeyName, 0x00, sizeof(szContentLine), szContentLine, 0x00, 0x00, sizeof(szContentLine), szContentLine, szContentLineBak, 0x00, szContentLineBak + iPositionFlag); // 去掉内容中的无关字符 for (iPositionFlag = 0; iPositionFlag < strlen(szContentLine); iPositionFlag ++) { if (szContentLine[iPositionFlag] == '\r' || szContentLine[iPositionFlag] == '\n' || szContentLine[iPositionFlag] == '\0') { szContentLine[iPositionFlag] = '\0'; break; } } // 将配置项内容拷贝到输出缓存中 strncpy(pszOutput, iOutputLen-1); break; } else if (szContentLine[0] == '[') { break; } } break; } } } /********************************************************************** * 功能描述: 从配置文件中获取字符串 * 输入参数: pszSectionName-段名承接网站前端, 如: GENERAL pszKeyName-配置项名,承接网站前端 如: EmployeeName pDefaultVal-默认值 iOutputLen-输出缓存长度 pszConfigFileName-配置文件名 * 输出参数: pszOutput-输出缓存 * 返 回 值: 无 * 其它说明: 无 * 修改日期 版本号 修改人 修改内容 * ------------------------------------------------------------------ * 20150617 V1.0 Zhou Zhaoxiong 创建 ********************************************************************/ void GetConfigFileStringValue(UINT8 *pszSectionName, UINT8 *pDefaultVal, UINT32 iOutputLen, ""); } else { strcpy(pszOutput, szWholePath); fp = fopen(szWholePath, szWholePath); return; } // 调用函数用于获取具体配置项的值 GetStringContentValue(fp, pszKeyName, iOutputLen); // 关闭文件 fclose(fp); fp = NULL; } /********************************************************************** * 功能描述: 参数解析函数网页切图制作,请扫描以下二维码:

$(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

点击次数:19553
作者:
web前端行业资讯
Web new NewsList
英特尔宣布与法拉利跨界合作欲将AI技术用于赛车运动 ,,2018年01月11日甲骨文服务器出漏洞:攻击者用漏洞挖矿获取加密货币 ,,2018年01月11日用深度学习设计图像视频压缩算法:更简洁、更强大 ,,2018年01月11日Ubuntu内核和NVIDIA更新:修复Meltdown和Spectre两处漏洞 ,,2018年01月11日AntDesign3.1.1发布,阿里企业级UI设计语言 ,,2018年01月11日微信「跳一跳」带火小游戏,开发者如何快速上手? ,,2018年01月11日谷歌公布最新安卓系统份额:你用上奥利奥了么? ,,2018年01月11日腾讯开发出“3D音效”算法:普通耳机实现3D实时语音效果 ,,2018年01月11日谷歌工程师点赞中国程序员实现Node.js启动超4倍提速 ,,2018年01月11日三星电子总裁兼CE部门负责人金炫奭:万物互联时代到来 ,,2018年01月11日NVIDIA和大众合作建立智能驾驶助手 ,,2018年01月11日GIMPS项目报告发现已知最大素数 ,,2018年01月11日微软与生物技术公司开展AI驱动的血液检测同时诊断数十种疾病 ,,2018年01月11日微软跨平台移动开发工具套件HockeyApp宣布免费 ,,2018年01月11日《硅谷》里神乎其神的压缩技术,AI正在一点点做出来 ,,2018年01月11日LinuxMint19代号敲定为“Tara”预计2018年5月至6月期间发布 ,,2018年01月11日Facebook发布wav2letter工具包,用于端到端自动语音识别 ,,2018年01月11日开源数据库ArangoDB正进行约1156万美元股权融资 ,,2018年01月11日IntelCPU漏洞闹大:腾讯云紧急升级 ,,2018年01月11日2018年1月全球数据库排名:Redis夺回第八 ,,2018年01月11日Lyft将联手无人驾驶公司于CES上展示无人驾驶汽车 ,,2018年01月11日京东X无人超市首家社会门店开业:刷脸进、微信自动结算 ,,2018年01月11日担心被AI取代是杞人忧天?高晓松跨年演讲说的有几分对 ,,2018年01月11日免费授权技术许可Intel宣布在未来CPU中集成雷电3 ,,2018年01月11日算法决定你在社交媒体上看到的信息 ,,2018年01月11日谷歌安全博客披露“英特尔内核漏洞”更多细节 ,,2018年01月04日Postgres10开发者新特性 ,,2017年12月28日阿里巴巴、狗尾草、苏大联合论文:基于对抗学习的众包标注用于中文命名实体识别 ,,2017年12月28日柯洁的2017:20岁,与AI斗与人类斗,其乐无穷 ,,2017年12月28日如果机器人拥有痛觉,这个世界会有哪些不一样? ,,2017年12月28日第四周上机实践项目1——三角形类的构造函数 【架构设计】2015年04月03日动态规划的简要总结和四个经典问题的c++实现 【Web前端】2015年06月24日FFmpeg与libx264接口源代码简单分析 【综合】2015年05月27日【VISA】实现PC与外设串口通信功能 【编程语言】2015年08月16日windows下安装完ubuntu激活开机选单 【架构设计】2015年05月25日使用agsXMPPSDK向Openfire发送文件的注意事项 【架构设计】2015年07月29日log4cpp的介绍【综合】2015年02月02日php中使用redis队列操作实例代码2014年01月29日黑马day17ajax&实现用户名自动刷新 【编程语言】2015年07月13日监控Goldengate状态 【Web前端】2015年03月11日Rust中文翻译27 【综合】2015年07月17日java抽象类和接口的区别 【编程语言】2015年07月13日org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException 【综合】2014年12月29日Torry的困惑(基本型)---蓝桥杯【综合】2015年04月09日WampServer下修改和重置MySQL密码 【综合】2015年04月03日MapReduce之RecordReader组件源码解析及实例 【移动开发】2015年06月17日where1=-1and1=1会不会影响查询效率? 【系统运维】2015年04月13日WindowsPhone8.1中日期和时间选择器DatePicker,TimePicker 【移动开发】2014年12月17日单例demo【编程语言】2014年11月27日HTML5学习笔记简明版(5):input的type超级类型 【系统运维】2015年07月24日Android笔记二十八.Service组件入门(二).绑定本地Service并与之通信 【编程语言】2015年03月27日Python与Perl的优缺点 【移动开发】2015年04月07日做一个简洁风格的PPT模板其实很简单!2014年01月28日研发管理08:敏捷Scrum相关基本概念【编程语言】2015年05月19日今15年创业,享受改变的过程(我的新书9月上市)【系统运维】2015年08月24日如何用WPS表格计算通话记录的合计时间2014年01月28日SpringMVC文件上传多文件上传实例2014年01月30日javascript中日期转换成时间戳的小例子2014年01月29日opencv学习笔记9直方图均衡化并绘制直方图 【编程语言】2015年01月07日nginx基础配置说明一则2014年01月29日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)