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