如何以特定于语言环境的方式格式化不完整的日期和/或时间?
我有一个日期/时间存储在一组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(2 7 -1)格式化字符串,但是创建/查找这样的字符串然后维护它们看起来像一个精神错乱的秘诀!