У меня есть строка, которая должна указывать дату и время в формате ISO 8601, который может иметь или не иметь миллисекунд в нем, и я я хочу получить от него struct tm
, а также любое значение миллисекунды, которое может быть указано (которое можно считать равным нулю, если не указано в строке).
Что было бы связано с обнаружением того, соответствует ли строка правильному формату, а также преобразует указанную пользователем строку в значения struct tm
и миллисекунды?
Если бы не проблема с миллисекундами, возможно, я мог бы просто использовать функцию C strptime()
, но я не знаю, как должно быть определено определенное поведение этой функции, когда секунды содержат десятичную точку.
Как одно из последних предостережений, если это вообще возможно, я бы предпочел решение, которое не имеет никакой зависимости от функций, которые находятся только в Boost (но я рад принять С++ 11 в качестве предпосылки).
Вход будет выглядеть примерно так:
2014-11-12T19:12:14.505Z
или
2014-11-12T12:12:14.505-5:00
Z
, в этом случае указывает UTC, но любой часовой пояс может использоваться и будет выражаться как смещение + или - часы/минуты от GMT. Десятичная часть поля секунд является необязательной, но факт, что она может быть вообще, заключается в том, почему я не могу просто использовать strptime()
или std::get_time()
, которые не описывают какого-либо определенного определенного поведения, если такой символ найден в секундной части строки.