Как отформатировать неполные даты и время определенным языковым способом

Как можно отформатировать неполные даты и / или времена определенным языковым способом?

У меня дата / время хранятся в наборе из 7 строк:

  • dayOfWeek — день недели. ([1,7])
  • dayOfMonth — день месяца. ([1,31])
  • monthOfYear — месяц года. ([0,11])
  • year — Год. ([-∞, ∞])
  • hourOfDay — час дня. ([0,11])
  • minuteOfHour — Минута часа. ([0,59])
  • meridianOfDay — Меридиан дня. ([0,1])

По разным причинам большинство из них получают с помощью IR для веб-данных, некоторые из этих строк могут быть пустыми. Тогда проблема заключается в том, как отформатировать такие неполные даты / время определенным языковым способом.

Что я сейчас делаю, используя boost.locale, это создать date_time и добавить к этому
различные компоненты даты / времени, которые завершены, затем сохраните date_time в
Локаль определенным образом в строке. Что-то вроде этого:

date_time dateTime;
if(!dayOfWeek.empty())
dateTime = period::day_of_week(lexical_cast<int>(dayOfWeek));
if(!dayOfMonth.empty())
dateTime = period::day(lexical_cast<int>(dayOfMonth));
if(!monthOfYear.empty())
dateTime = period::month(lexical_cast<int>(monthOfYear));
if(!year.empty())
dateTime = period::extended_year(lexical_cast<int>(year));
if(!hourOfDay.empty())
dateTime = period::hour_12(lexical_cast<int>(hourOfDay));
if(!minuteOfHour.empty())
dateTime = period::minute(lexical_cast<int>(minuteOfHour));
if(!meridianOfDay.empty())
dateTime = period::am_pm(lexical_cast<int>(meridianOfDay));

std::stringstream stringStream;
stringStream.imbue(desiredLocale);
stringStream << dateTime;

std::string localeSpecificDateTime = stringStream.str();

Это работает в некоторой степени. У меня локаль отформатирована date_time, Тем не менее, поля
неполные заполнены датой / временем сейчас, из-за date_time Я начинаю с.

Что было бы идеально, если бы можно было пометить неполные поля, чтобы они не были включены в
форматирование date_time,

PS: Я знаю, что смог бы поддерживать 127 (27-1) форматирование строк для каждой локали, но создание / поиск таких строк и последующее их обслуживание выглядит как рецепт безумия!

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …