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

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

У меня дата / время хранятся в наборе из 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) строк форматирования для каждой локали, но создание / поиск таких строк и последующее их обслуживание кажется рецептом безумия!

0 ответов

Другие вопросы по тегам