Linux 在文件内读取时间段字符串并解析判断当前时间是否在时间段内 C语言

最近需要实现一个判断当前是否是上班时间段内,但是需要从文件中读取特定的格式时间时间段

格式: 00:00-12:34|13:56-15:00(不确定几个时间段,每个时间段以|分隔)

读取特定格式时间并转化不难但是挺麻烦的

//获得当前中国时区时间
void getNowTime(char* bufTime,int bufTimeLength)
{//setTimeZone("Asia/ShangHai");time_t now;struct tm *info;time(&now);info = localtime(&now);info->tm_hour=(info->tm_hour)+8;strftime(bufTime,bufTimeLength,"%Y-%m-%d %H:%M:%S",info);return ;
}//解析时间段 时间段格式 00:00-12:34
void parseTime(const char* timeStr,int* hour,int* minute)
{sscanf(timeStr,"%d:%d",hour,minute);
}
void parseTimePar(const char* timeParStr,int* startHour,int* startMinute,int* endHour,int* endMinute)
{char startTime[6],endTime[6];sscanf(timeParStr,"%5[^-]-%5s",startTime,endTime);parseTime(startTime,startHour,startMinute);parseTime(endTime,endHour,endMinute);
}//判断当前时间是否在上班时间
int inWork(int nowHour,int nowMinute,int startHour,int startMinute,int endHour,int endMinute)
{  int now = nowHour*60+nowMinute;int start = startHour*60+startMinute;int end = endHour*60+endMinute;//printf("now:%d:%d\nstart:%d:%d\nend:%d:%d\n",nowHour,nowMinute,startHour,startMinute,endHour,endMinute);if(start>end){printf("startTime>endTime====>now is all day\n");return 1;}if(now>=start&&now<=end){return 1;}return 0;
}//从文件中读取时间字符串
//格式:00:00-12:34|12:35-12:36|14:33-14:34|...(不确定的多个时间段,每个时间段以|分隔)
int workOrRest()
{time_t t1,tim;struct tm *p;time(&t1);p = localtime(&t1);int nowHour = (p->tm_hour)+8;int nowMinute = p->tm_min;int workFlag=0;FILE *fp;char loadFile[256];char line[256];strcpy(loadFile,"/home/projects/timeSet.txt");fp = fopen(loadFile,"r");if(fp==NULL){printf("can not load file! function in workOrRest\n");return -1;}if(!fgets(line,sizeof(line),fp)){printf("file error!\n");return -1;}//char* first = strtok(line,"|");//if(first)//{//  printf("%s\n",first);//}//char* second = NULL;char *timeParStr;char *ptr = line;while((timeParStr = strtok_r(ptr,"|",&ptr))){int startHour,startMinute,endHour,endMinute;parseTimePar(timeParStr,&startHour,&startMinute,&endHour,&endMinute);if(inWork(nowHour,nowMinute,startHour,startMinute,endHour,endMinute)){workFlag=1;break;}//printf("workFlag:%d\n",workFlag);}return workFlag;
}//调用示例
int main()
{if(workOrRest())printf("上班时间段\n");elseprintf("休息时间\n");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/34520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu bin目录

ubuntu bin目录 在Ubuntu以及其他Unix和Linux系统中&#xff0c;bin目录扮演着非常重要的角色。这个名字bin来自“binary”的缩写&#xff0c;意味着这些目录包含二进制可执行文件&#xff0c;即那些编译过的程序&#xff0c;用户和系统可以直接运行这些程序。 不同类型的bin…

Trip.com 如何从 Elasticsearch 迁移到 ClickHouse 并构建了 50PB 的日志解决方案

本文字数&#xff1a;8721&#xff1b;估计阅读时间&#xff1a;22 分钟 审校&#xff1a;庄晓东&#xff08;魏庄&#xff09; 本文在公众号【ClickHouseInc】首发 在 Trip.com&#xff0c;我们为用户提供广泛的数字产品&#xff0c;包括酒店和机票预订、景点、旅游套餐、商务…

java创建0byte的空文件

在Java中&#xff0c;使用File类创建一个文件通常不会自动创建一个0字节的文件&#xff0c;它只是用来表示文件系统中的一个文件或目录。如果你想要创建一个0字节的文件&#xff0c;你需要使用FileOutputStream来写入文件。以下是创建一个0字节文件的示例代码&#xff1a; imp…

专业英语词汇(计算机)

purpose 目的 phase 阶段 investigate 调查 satisfy 满足 delivering 提供 交付 collaboration 协作 architecture 结构 storage 存储 enterprise 企业 extreme 极端 feedback 反馈 courage 勇气 effort 努力 essential 基本上 crisply 清晰的 precise 精确的 critical 关键 ap…

电脑复制按哪个键?还不会操作的赶紧来看!

当我们提到“电脑复制按哪个键”时&#xff0c;实际上是在讨论电脑键盘上用于执行复制操作的快捷键。复制功能在日常的电脑操作中极为常用&#xff0c;无论是文本编辑、文件处理还是图片操作&#xff0c;都离不开复制这一基本功能。以下&#xff0c;我们将深入探讨电脑复制操作…

【环境搭建】windows下MySQL8与5共存

目录 一、安装MySQL81.官网下载2.初始化mysql文件夹中my.ini文件3.初始化data文件夹&#xff0c;并记录初始密码4.安装服务&#xff0c;指定服务名称5.启动服务6.测试登录并修改密码 二、安装MySQL51.mysql5文件夹中初始化my.ini文件2.初始化data文件夹&#xff0c;并记录初始密…

GraphQL:简介

GraphQL 图片来源&#xff1a; 我们将探索GraphQL 的基础知识&#xff0c;并学习如何使用Apollo将其与 React 和 React Native 等前端框架连接起来。这将帮助您了解如何使用 GraphQL、React、React Native 和 Apollo 构建现代、高效的应用程序。 什么是 GraphQL&#xff1f;…

春秋云境:CVE-2022-25411[漏洞复现]

根据题目提示和CNNVD优先寻找后台管理地址 靶机启动后&#xff0c;使用AWVS进行扫描查看网站结构 在这里可以看到后台管理的登录地址&#xff1a;/admin/&#xff0c;根据题目提示可知是弱口令 尝试admin、123456、admin666、admin123、admin888...等等常见弱口令 正确的账户…

Linux Vim最全面教程

Vim 是一款功能强大的文本编辑器&#xff0c;常用于 Linux 系统中。以下是一份 Vim 最全面教程&#xff1a; 三种模式&#xff1a; 命令模式&#xff1a;可以进行删除、复制、粘贴等快捷操作&#xff0c;按esc键可以返回到命令模式&#xff1b;编辑模式&#xff1a;可以编辑文件…

地理空间数据格式GeoJSON扫盲,在CesiumJS中如何加载。

Hi&#xff0c;我是贝格前端工场&#xff0c;GIS已经越来越多的应用在可视化大屏中了&#xff0c;开发GIS类应用就少不了地理空间数据&#xff0c;本文介绍一下数据GeoJSON数据格式。 一、什么是GeoJSON数据格式&#xff0c;在GIS开发中有什么作用 GeoJSON是一种基于JSON&…

【MySQL】数据库——备份与恢复,日志管理1

一、数据备份的重要性 1.备份的主要目的是灾难恢复 在生产环境中&#xff0c;数据的安全性至关重要 任何数据的丢失都可能产生严重的后果造成数据丢失的原因&#xff1a; 程序错误人为,操作错误运算错误磁盘故障灾难&#xff08;如火灾、地震&#xff09;和盗窃 2.数据库备份…

小窗口大魔力,实况窗服务实时掌控重要信息变化

移动互联网时代&#xff0c;各种以用户为中心的App如春笋般涌现&#xff0c;满足了用户在购物、导航、娱乐等不同场景下的需求&#xff0c;不同程度上丰富了用户的日常生活。然而&#xff0c;随着App种类的激增&#xff0c;用户在享受多样化服务的同时&#xff0c;也面临着多任…

26.4 Django 视图层

1. 视图函数 视图函数是Django框架中用于处理Web请求并返回Web响应的重要组件. 以下是对Django视图函数的详细解释: * 1. 视图函数与URL的映射.为了让Django能够知道哪个URL对应哪个视图函数, 需要在应用的urls.py文件中定义URL模式.使用path或re_path函数来定义URL模式, 并将…

Linux安装frp实现内网穿透

Linux运维工具-ywtool 目录 一. 简介二.代理类型三.frp支持的Linux的架构四.安装1.准备工作2.配置frp服务器端(a)下载安装包(b)解压安装包(c)修改配置文件(d)启动服务端 3.配置frp客户端(a)下载安装包并修改配置文件(b)启动客户端 4.测试连接 五.其他1.多端口穿透(a)服务端(b)客…

【AI】存储自定义色板库

点击左上角色板&#xff0c;弹出色板框&#xff1b; 色板框的左下角有一个“色板库” 菜单&#xff0c;点击色板库菜单&#xff0c;弹出色板库&#xff1b; 色板库弹窗的第一条数据【存储色板】&#xff0c;点击存储色板&#xff0c;出现自定义色板所在文件路径&#xff1b; 找…

vue如何把组件方法暴露到window对象中

vue如何把组件方法暴露到window对象中 场景&#xff1a;使用Vue开发电子地图功能&#xff0c;供客户端使用qtWebEngineView嵌入页面&#xff0c;客户端需要调用页面里定义的js方法实现相应功能。 问题&#xff1a;Vue组件内的方法&#xff0c;在外部调用不到。 原因&#xf…

线程的创建(一)

通过继承Thread类实现多线程 继承Thread类实现多线程的步骤&#xff1a; 在Java中复责实现线程功能的类是java.lang.Thread类。&#xff08;此种方式的缺点&#xff1a;如果我们的类已经继承了一个类&#xff08;如&#xff1a;小程序必须继承自 Appiet 类&#xff09;&#x…

计算机毕业设计Thinkphp/Laravel校园体育器材管理系统

校园体育器材管理系统在流畅性&#xff0c;续航能力&#xff0c;等方方面面都有着很大的优势。这就意味着校园体育器材管理系统的设计可以比其他系统更为出色的能力&#xff0c;可以更高效的完成最新的体育器材、器材借用、器材归还、器材损坏、采购入库、器材报废、维修记录等…

产品(soc)研发量产流程介绍

硬件开发流程: 开始 ↓ 立项:经过市场调研、客户需求分析、可行性评估(技术,成本,时间)确定需要做的事情,制定初步产品定义和规格 ↓ 供应商导入:如果自身无工厂,需要与工厂联姻,一起合作“生产品” ↓ 产品设计与开发:将需求转化为图纸、规格,即“纸上谈兵…

linux 获得打开指定文件进程的PID和该进程的绝对路径 C语言

下面代码效果是查出哪个进程打开了指定文件,可以查出打开文件进程的PID以及该进程所在linux的绝对路径(只能查出一个,想得出全部的需要小改一下代码),并且可以自己选择是否kill掉这个进程 #include <stdio.h> #include <string.h> #include <stdlib.h>//执行…