расчет времени в C ++ - PullRequest
       26

расчет времени в C ++

0 голосов
/ 11 апреля 2011

У меня есть текстовый файл с записями в нем.Мне нужно решить, если время (которое является частью структуры записи) между 2 раза (хранится в строках), который представляет нижний и верхний диапазон.В файле время представлено в виде 145540123456, что означает 14 с точностью до часа, 55 - минут, 40 - секунд, 123456 - микросекунд.

Верхнее и нижнее время, которое я получу, чтобы решить, находится ли оно вдиапазон, я получаю его в виде строки в том же формате, например "093000000000".Как мне сделать расчет, нужно ли мне делать это с time_t и библиотекой времени?

Примечание: я не могу использовать Boost.

Ответы [ 4 ]

6 голосов
/ 11 апреля 2011

У заданного вами формата есть простое преимущество: алфавитно-цифровая сортировка этих временных строк будет сохранять их в правильном порядке.

Поэтому, используя strcmp (простая функция C, если используется символ с нулем в конце* буферы), или операторы сравнения для std::string могут позволить вам легко определить, принадлежит ли определенная строка времени интервалу.

Эти методы могут привести к очень небольшому количеству вычислений, если, например, первыйхарактер сравниваемых строк отличается, поскольку стандартные функции должны быть достаточно умными, чтобы прекратить сравнение строк, как только они определят результат.

1 голос
/ 11 апреля 2011

В этом случае просто конвертируйте его в число и сравните.Ваш формат помещает наиболее значимые цифры слева.Максимально возможное число - 235,959,999,999, которое не помещается в длинную без знака.

Простой способ - разделить его на ЧЧММСС и мммммм - если первые числа равны, сравните второе.

1 голос
/ 11 апреля 2011

Если вы не вычитаете эти числа, вы можете просто сравнить их как числа.Тот, который представляет более длительное время, всегда будет также большим числом.Это потому, что у вас есть единицы, которые весят больше всего на левом конце (часы) и единицы, которые весят меньше всего на правом конце (микросекунды), которая является той же системой, что и обычные числа.

Просто преобразуйте его в unsigned int64 или что-то, а не просто в int, так как это будет переполнено числом, например 145540123456.

0 голосов
/ 11 апреля 2011

Лучший способ (c) обрабатывать вычисления даты / времени в C ++ - это библиотека Boost.Date_Time .

К сожалению, ваши строки не в каком-либо стандартном формате. Таким образом, вам придется анализировать их самостоятельно и использовать это в качестве входных данных для длительности посикса.

Если вы не можете использовать какую-либо библиотеку, вы можете просто определить структуру с членами часа, минут, секунд и микросекунд и operator<. Затем просто проанализируйте входные данные в этих структурах и сравните их.

Другим вариантом является преобразование каждой длительности в микросекунды. Тогда сравнение становится тривиальным.

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