\n
в основном работы для нас, но Outlook действительно иногда берет его на себя для удаления разрывов строки, как Вы говорите.
Библиотека Юлиана делает многое из того, о чем вы просите - посмотрите, в частности, как работает ее синтаксический анализ . Однако я не думаю, что это полностью соответствует вашим требованиям (я полагаю, что понедельник
бросит это испытание; -).
В time.h у вас есть strptime:
// Scan values from buf string into tptr struct. On success it returns pointer
// to the character following the last character parsed. Otherwise it returns null.
char * strptime(const char* buf, const char* format, struct tm* tptr)
, который делает противоположность
// Format tm into a date/time string.
size t strftime(char* s, size t n, const char* format, const struct tm* tptr)
. Щелкните здесь, чтобы увидеть полную ссылку в Википедии
К сожалению, в стандартной библиотеке есть только getdate ()
, определенный POSIX, а не стандартом C. Он будет обрабатывать многие форматы времени, но вам нужно знать формат заранее, а не просто передавать универсальную строку в функцию.
Он также не поддерживается в Visual C ++, если это для вас проблема. Однако среда выполнения GNU C поддерживает эту процедуру.
В C есть два довольно распространенных подхода:
Используйте strptime () с массивом поддерживаемых форматов, которые вы принимаете.
Сильно стучите головой о стол, а затем либо откажитесь. или используйте другой язык, на котором уже есть полезная библиотека (например, perl или python).
Git имеет портативную библиотеку синтаксического анализа дат , выпущенную под GPLv2. Возможно, вы сможете это использовать. Думаю, вам нужен приблизительно_careful ()
.