ICU DateFormatSymbols :: getMonths()

时间:2016-07-05 09:47:20

标签: c++ icu

我正在开发一个项目,该项目利用ICU的库来处理各种语言的日期信息。我在函数中使用以下代码:

UErrorCode uec;
Locale locale(language); // e.g with language = "en"
DateFormatSymbols symbs( locale, uec );
int32_t count;
auto months = symbs.getMonths(count);
for( int32_t i = 0 ; i < count; ++i ){
  // some code handling month names, no ICU;
}
// more code that does not use ICU

count的值应该由getMonths()方法设置为获得的月数,例如12当语言是英语时。

问题是,当我多次调用同一个函数时,有时count为12,有时为0,看似无法预测。更糟糕的是,相同的代码对我的同事的行为有所不同。当我添加与symbs无关的代码行时,PC和更改行为,例如在函数内的某处创建UnicodeString

我怀疑DateFormatSymbols或语言环境的初始化有些问题,但对于我的生活,我无法弄清楚是什么。任何人都可以告诉我为什么会发生这种情况,以及可能如何修复它以便我总是在count中获得预期的月数?

1 个答案:

答案 0 :(得分:0)

您需要初始化uec

UErrorCode uec;

然后你需要检查其结果

DateFormatSymbols symbs( locale, uec ); if (U_FAILURE(uec)) { … // handle error …  }

请参阅error handling