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