我有时间格式,看起来像这样:
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/