下载资源后端资源详情
timerange.zip
大小:8.03KB
价格:49积分
下载量:0
评分:
5.0
上传者:weixin_38700215
更新日期:2025-09-22

基于规则“SunThu-00:02:00-00:03:00,Mon-16:59:00-20:00:00”时间范围检查(C语言)

资源文件列表(大概)

文件名
大小
timerange/
-
timerange/Makefile
128B
timerange/time_range_check
16.74KB
timerange/time_range_check.c
5KB

资源内容介绍

规则:1、Mon、Tue、Wed...表示一周的某一天;2、00:02:00-00:03:00表示一天之内的某一时间段;3、SunThu|00:02:00-00:03:00表示某天(和某天)的某一时间段;4、SunThu|00:02:00-00:03:00,Mon|16:59:00-20:00:00表示某天(和某天)的某一时间段和表示某天(和某天)的某一时间段,一组内可包括一至七天,一组内只能包括一个时间段。基于以上规则,使用C语言实现检查当前时间点是否在规则规定的时间段内,使用方式:./time_range_check"SunThu|00:02:00-00:03:00,Mon|16:59:00-20:00:00,FriSun|00:02:00-23:30:59,Sun|15:59:00-20:00:00"规则格式正确当前时间点在规则内
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>typedef struct { char days[100]; char start_time[10]; char end_time[10];} TimePeriod;int check_day(char *days) { char day[4]; day[3] = '\0'; for(int i = 0;i < strlen(days); i += 3){ memcpy(day, days + i, 3); if (strcmp(day, "Mon") != 0 && strcmp(day, "Tue") != 0 && strcmp(day, "Wed") != 0 && strcmp(day, "Thu") != 0 && strcmp(day, "Fri") != 0 && strcmp(day, "Sat") != 0 && strcmp(day, "Sun") != 0) { return 0; } } return 1;}int check_time(char *time) { int h1, m1, s1, h2, m2, s2; //if(strlen(time) != 17) // return 0; if (sscanf(time, "%02d:%02d:%02d-%02d:%02d:%02d", &h1, &m1, &s1, &h2, &m2, &s2) != 6) { return 0; } if (h1 < 0 || h1 > 23 || m1 < 0 || m1 > 59 || s1 < 0 || s1 > 59 || h2 < 0 || h2 > 23 || m2 < 0 || m2 > 59 || s2 < 0 || s2 > 59) { return 0; } return 1;}int check_group(char *group) { char *saveptr1 = NULL; char *saveptr2 = NULL; char *token = strtok_r(group, "|", &saveptr1); if (token == NULL) { return 0; } char *days = token; token = strtok_r(NULL, "|", &saveptr1); if (token == NULL) { return 0; } char *time = token; // 检查 days 部分 char *day = strtok_r(days, "", &saveptr2); int day_count = 0; while (day != NULL) { if (!check_day(day)) { return 0; } day_count++; day = strtok_r(NULL, "", &saveptr2); } if (day_count < 1 || day_count > 7) { return 0; } // 检查 time 部分 if (!check_time(time)) { return 0; } return 1;}int check_rule(char *timestr) { char *saveptr = NULL; char *rule = strdup(timestr); char *token = strtok_r(rule, ",", &saveptr); while (token != NULL) { if (!check_group(token)) { return 0; } token = strtok_r(NULL, ",", &saveptr); } return 1;}void getCurrentTime(char *current_time) { time_t now = time(NULL); struct tm *t = localtime(&now); sprintf(current_time, "%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec);}void getCurrentDate(char *current_date) { time_t now = time(NULL); struct tm *t = localtime(&now); sprintf(current_date, "%d-%02d-%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday);}int getCurrentWeekday() { time_t now = time(NULL); struct tm *t = localtime(&now); return t->tm_wday;}int compareTime(const char *time1, const char *time2) { int h1, m1, s1, h2, m2, s2; sscanf(time1, "%d:%d:%d", &h1, &m1, &s1); sscanf(time2, "%d:%d:%d", &h2, &m2, &s2); if (h1 < h2) { return -1; } else if (h1 > h2) { return 1; } else { if (m1 < m2) { return -1; } else if (m1 > m2) { return 1; } else { if (s1 < s2) { return -1; } else if (s1 > s2) { return 1; } else { return 0; } } }}int checkTimePeriod(TimePeriod *period, char *current_time) { int start_comp = compareTime(period->start_time, current_time); int end_comp = compareTime(period->end_time, current_time); return start_comp <= 0 && end_comp >= 0;}int checkDay(char *days, int current_weekday) { char weekdays[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; if (current_weekday >= 0 && current_weekday < 7 && (strstr(days, weekdays[current_weekday]) != NULL)) { return 1; } return 0;}int time_check(char *timestr) { char *rules = strdup(timestr); char current_time[10]; char current_date[20]; getCurrentTime(current_time); getCurrentDate(current_date); int current_weekday = getCurrentWeekday(); char *saveptr1, *saveptr2, *saveptr3; char *token = strtok_r(rules, ",", &saveptr1); while (token != NULL) { TimePeriod period; char *days_time = strtok_r(token, "|", &saveptr2); strcpy(period.days, days_time); char *time_range = strtok_r(NULL, "|", &saveptr2); char *start_time = strtok_r(time_range, "-", &saveptr3); strcpy(period.start_time, start_time); char *end_time = strtok_r(NULL, "-", &saveptr3); strcpy(period.end_time, end_time); if (checkDay(period.days, current_weekday) && checkTimePeriod(&period, current_time)) { printf("当前时间点在规则内\n"); return 0; } token = strtok_r(NULL, ",", &saveptr1); } printf("当前时间点不在规则内\n"); return 0;}int main(int argc, char *argv[]) { if (argc < 2) { printf("请输入时间范围规则,eg:\n %s \"SunThu|00:02:00-00:03:00,Mon|16:59:00-20:00:00,FriSun|00:02:00-23:30:59,Sun|15:59:00-20:00:00\"\n", argv[0]); return 1; } if (check_rule(argv[1])) { printf("规则格式正确\n"); time_check(argv[1]); } else { printf("规则格式错误\n"); } return 0;}

用户评论 (0)

发表评论

captcha

相关资源

vue.js 代码文件压缩包

vue.js

103.96KB30积分

后端学习+宠物医院管理系统+SpringBoot+BootStrap4+毕设

【功能简介】前台显示医院文化信息,可在线挂号,在线预约,在线查看专家信息和宠物常见病治疗方法;后台显示会诊宠物信息,医院人员信息,医生信息,医院人员排班,手术安排等。【安装教程】下载项目,配置本地maven、数据库信息,即可直接运行【使用说明】执行数据库脚本文件pet_hospital.sql(自动创建数据库表及导入数据)修改数据库配置信息jdbc数据库地址、账户和密码启动项目启动成功后,浏览器访问: http://localhost/toLogin账号: admin/123456【涉及技术】SpringBoot(2.2.7)+MySQL+Thymeleaf+Shiro+WebSocket+BootStrap4+Log4J

20.84MB16积分

ES客户端+谷歌浏览器插件+Multi-Elasticsearch-Head

多弹性搜索头,对著名的 Elasticsearch Head 的改进1.保存和存储几个Elasticsearch端点2.索引选项卡中的更多列3. 任何请求现在都可以像 /_cat/indices 一样处理 JSON 返回4. 更简约的外观(更小的字体等...)Multi-Elasticsearch-Head是一个用于管理多个Elasticsearch集群的Web界面工具。它基于Elasticsearch-Head或者Kibana的Dev Tools Console概念,但是增加了同时连接和管理多个Elasticsearch实例或集群的能力。这意味着用户可以通过一个统一的界面执行搜索、浏览索引、管理文档、监控集群状态以及执行高级查询和聚合操作,而无需在不同集群间切换登录。使用Multi-Elasticsearch-Head,管理员或开发者可以轻松地查看和对比不同集群的状态、性能指标以及数据分布,这对于分布式系统监控和故障排查特别有用。它通常提供了一种直观的方式来查看索引结构、执行查询语句、分析日志数据,以及执行其他与Elasticsearch管理相关的任务。

458.68KB14积分

sdut stm32&mdk-arm单片机期末实验

sdut stm32&mdk-arm单片机期末实验

57.33MB29积分