如何以特定于语言环境的方式格式化不完整的日期和时间

时间:2012-12-12 18:35:49

标签: c++ boost c++11 locale boost-locale

  

如何以特定于语言环境的方式格式化不完整的日期和/或时间?

我有一个日期/时间存储在一组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)格式化字符串,但是创建/查找这样的字符串然后维护它们看起来像一个精神错乱的秘诀!

0 个答案:

没有答案