c - 解析时间段

标签 c

我有时间格式,看起来像这样:

10:30-12:30,18:00-00:30 Mo-We,Th,Sa

Mo-Fr 08:00-13:30; Sa 08:00-12:30

有没有简单快捷的方法来解析这个?我需要一个函数来以这种格式比较当前时间和日期。

这是标准格式吗?

最佳答案

不,这不是标准格式。我会尝试将您的问题分成几个关键部分:

1) 数据存储:

由于问题仅限于一周中的几天,您可以创建一个由 tm structs 对组成的数组对于一周中的每一天:

#include <time.h>

typedef tm interval[2];
typedef interval* daysofweek[7];

void main(void)
{
    int number_of_intervals = 2; //this must be calculated for each day but to exemplify how you could store your data I initialised it to 2
    interval *intervals;
    intervals = (interval*)malloc(number_of_intervals);
    daysofweek d;
    d[0] = intervals; //you must set the intervals for each day
}

2) 解析

您应该根据字符串的语法定义一组规则。根据您举例说明的两个字符串,我将定义以下规则:

  • 根据;字符拆分和处理所有字符串
  • 将结果字符串分成数字部分(加上-:,)和字符部分
  • 用数字解析部分并创建时间间隔
  • 解析带有字符的部分并为每一天填充数组,跟踪所有天数以便您可以以 0 秒间隔初始化剩余天数

3) 比较

填充数据结构后,您可以使用 ctime 中的比较函数对其进行解析并推断您是否处于区间内.

喂, JP.

附言如果您使用 C++ 和 STL 而不是纯 C,任务会更容易一些。

关于c - 解析时间段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7201462/

相关文章:

有人可以建议我,如何对此数据接收代码实现暂停和恢复功能吗?

c - 在 C 中如何检查输入不是 int 或 float ?

c - tcc:在汇编代码中使用 C 标准函数

c - 如何重新启动链表的循环?

c - 使用字符串路径将列表链接到文件,它是正确的实现吗?

c - 如何在 C 中执行 IP 遍历

c - 具有动态字符串的动态数组。读取字符串字符时出错

c - 如何将无符号字符数组解释为十六进制数组?

c++ - 如何正确编译和链接 C 程序?

c++ - protobuf-c 和 protobuf 的兼容性