Что делает strptime с информацией, которую читает / конвертирует? - PullRequest
3 голосов
/ 17 августа 2011

Спецификация для strptime:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html

в основном ясна в отношении возможных спецификаций преобразования и того, какой ввод они требуют.Тем не менее, похоже, что нет никакой спецификации для того, как эта функция сохраняет результаты в struct tm.Что должно произойти, если несколько спецификаторов читают частично или полностью противоречивые данные.Простым примером может быть наличие %m и %b (или даже дубликатов %m) чтения конфликтующих месяцев, но, возможно, более интересный пример - когда %d (день месяца) и %a(день недели) конфликт.Который имеет приоритет?strptime вообще должен обеспечивать согласованный вывод в struct tm или просто хранить поля как прочитанные?Некоторые вещи, такие как %W (неделя года) не имеют прямого представления в struct tm, поэтому я предполагаю, что они должны привести к генерации производного вывода на основе других полей, но неясно, когда это применимо.

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

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

1 Ответ

2 голосов
/ 17 августа 2011

Дополнительные поля могут быть использованы для проверки даты.Валидация и проверка: вы можете преобразовать строку в серию чисел, которые повторно представляют дату, затем вы должны убедиться, что все эти числа относятся к одной правильной дате, например, день недели является правильным, если дата недействительна, то strptime возвращает NULL.

...