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

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

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

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

cpp 复制代码
//获得当前中国时区时间
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");
    else
       printf("休息时间\n");
}
相关推荐
poemyang13 分钟前
“一切皆文件”:揭秘LINUX I/O与虚拟内存的底层设计哲学
linux·rpc·i/o 模式
大聪明-PLUS39 分钟前
GPIO 也是一个接口,还有 QEMU GPIODEV 和 GUSE
linux·嵌入式·arm·smarc
一碗绿豆汤1 小时前
C语言-函数
c语言
闭着眼睛学算法2 小时前
【双机位A卷】华为OD笔试之【模拟】双机位A-新学校选址【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·javascript·c++·python·算法·华为od
草莓工作室2 小时前
AT指令解析:TencentOS Tiny AT指令解析源码分析1-TencentOS Tiny 简介
c语言·物联网·嵌入式·at指令·4g模组
红尘客栈22 小时前
Kubernetes 集群调度
java·linux·网络·容器·kubernetes
Starry_hello world3 小时前
Linux 进程地址空间
linux·笔记·有问必答
撬动未来的支点3 小时前
【Linux】Linux驱动开发与BSP开发:嵌入式系统的两大基石
linux·驱动开发
jz_ddk3 小时前
[LVGL] 从0开始,学LVGL:基础构建篇 - 掌握UI的核心构建块
linux·网络协议·ui·rpc·嵌入式·gui·lvgl
无限进步_4 小时前
扫雷游戏的设计与实现:扫雷游戏3.0
c语言·开发语言·c++·后端·算法·游戏·游戏程序