Преобразование ISO 8601 в time_t в C или наоборот

Согласно ISO 8601 время можно указывать в разных форматах.

Моя программа не знает, какой именно формат ISO 8601 будет указан.

В этом случае, как я могу преобразовать его в time_t?

strptime требует от вас указать формат (который я не знаю заранее в моем случае).

Конечная цель: сравнить 2 отметки времени.

Изменить 0: поскольку моя цель - сравнить 2 метки времени, преобразование time_t в ISO 8601 также будет работать.

2 ответа

Решение

Если вы работаете на UNIX-подобной машине, попробуйте getdate. Интерфейс прикольный, но работает довольно хорошо.

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

Вы говорите, что нужно сравнить два time_t ценности, в конечном счете. Но как вы получаете эти ценности? Если они отправляются в виде строк, то ответ Byron Whitlock правдоподобен, если ваша машина поддерживает getdate(), Если они уже time_t, то вы можете сравнить значения времени. Если вам нужно сравнить time_t генерируется локально с помощью строки, сгенерированной удаленно, тогда вы оказались между камнем и наковальней; Вы должны как-то знать, какой стиль ISO 8601 используется при отправке данных.

Обратите внимание, что ISO 8601 ожидает, что две системы, обменивающиеся информацией, согласятся с обозначением, которое они собираются использовать, и, в частности, что они согласятся, какие поля можно пропустить (если они есть) и будет ли пунктуация разделять поля. Если вы знаете (единый) формат или можете настроить свою систему так, чтобы для каждого источника данных вы использовали формат ISO 8601, который будет использоваться, то POSIX strptime() Функция может обрабатывать практически все - хотя вам нужно знать, как ваш код будет обрабатывать любые неопределенные поля.

Полное название стандарта: " ISO 8601: 2004 Элементы данных и форматы обмена. Обмен информацией. Представление даты и времени ". Его раздел §3.7 Взаимное соглашение гласит:

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

Другие вопросы по тегам