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