Разобрать периоды времени - PullRequest
0 голосов
/ 26 августа 2011

У меня есть формат времени, который выглядит так:

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

и

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

Есть ли простой и быстрый способ разобрать это? Мне нужна функция для сравнения текущего времени с датой в этих форматах.

Это стандартный формат?

1 Ответ

3 голосов
/ 26 августа 2011

Нет, это не стандартный формат. Я постараюсь разбить вашу проблему на несколько ключевых частей:

1) Хранение данных:

Поскольку проблема ограничена днями недели, вы можете создать массив пар тм структур для каждого дня недели:

#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.

P.S. если бы вы использовали C ++ и STL вместо простого C, задача была бы немного проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...