3

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

我有一个日期/时间存储在一组 7 个字符串中:

  • dayOfWeek- 星期几。([1,7])
  • dayOfMonth- 一个月中的哪一天。([1,31])
  • monthOfYear- 一年中的月份。([0,11])
  • year- 那一年。([-∞,∞])
  • hourOfDay- 一天中的时间。([0,11])
  • minuteOfHour- 小时的分钟。([0,59])
  • meridianOfDay- 当天的子午线。([0,1])

由于各种原因,其中大部分是通过使用 IR on web 数据获得的,其中一些字符串可能为空。那么问题是如何以特定于语言环境的方式格式化这些不完整的日期/时间。

我目前使用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。但是,由于I 开头,不完整的字段填充了now的日期/时间。date_time

如果可以将不完整的字段标记为不包含在date_time.

PS:我知道我可以为每个语言环境维护 127 (2 7 -1) 个格式化字符串,但是创建/查找这些字符串然后维护它们似乎是一种精神错乱的方法!

4

0 回答 0