Преобразование ISO 8601 в time_t в C или наоборот - PullRequest
7 голосов
/ 08 июля 2011

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

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

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

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

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

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

Ответы [ 2 ]

7 голосов
/ 08 июля 2011

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

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

2 голосов
/ 08 июля 2011

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

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

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

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

...