Я думаю, что ваша строка формата должна выглядеть так: %Y-%m-%dT%H:%M:%s *;%ZP
%s *
будет соответствовать секундам и долям секунды.С этим изменением вышеприведенный код работает, как ни странно, вывод, который я получаю:
1989-Nov-09 15:30:42.005000 ST
Не уверен, почему он говорит ST
вместо PST
, однако часовой поясинформация анализируется правильно, если вы измените дату, например, на ноябрь-01, то она сообщит PDT
.
РЕДАКТИРОВАТЬ: описание объекта часового пояса здесь .
Хорошо, из-за того, что возиться с этим, кажется, что ошибка синтаксического анализа вызвана присутствием ;
, удаляя его из исходной строки так, что оно становится:
std::istringstream ss("1989-10-16T15:30:42.005 PST-8PDT,M3.2.0,M10.2.0");
И изменение строки формата на:
local_time_input_facet* facet = new local_time_input_facet("%Y-%m-%d %H:%M:%s %ZP");
правильно сообщает:
1989-Oct-16 15:30:42.005000 PST
Если вы снова измените строку ввода на:
std::istringstream ss("1989-10-16T15:30:42.005 PST-8PDT,M3.2.0,M11.1.0");
вывод снова верен:
1989-Oct-16 15:30:42.005000 PDT
Это говорит мне о том, что действительно учитывает информацию о часовом поясе, встроенную в строку ... поэтому интересный вопрос: почему это раздражает, если есть ;
?
Дальнейшее обновление, похоже, что входng может содержать только буквенно-цифровые символы, символы из набора .:-,
и пробелы - после дробных битов, т. е. вы не можете отделить информацию о часовом поясе ни с каким символом, кроме того, что я перечислил выше (это не является исчерпывающимвремя проверить их всех!)