2016-07-05 1 views
1

Je travaille sur un projet qui utilise les bibliothèques ICU pour gérer les informations de date dans différentes langues. J'utilise le code suivant dans une fonction:ICU DateFormatSymbols :: getMonths()

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 

La valeur de count est censée être définie par la méthode getMonths() que le nombre de mois obtenu, par exemple, 12 quand la langue est l'anglais.

Le problème est, quand j'appelle la même fonction plusieurs fois, parfois count est 12 et parfois il est 0, apparemment imprévisible. Pire encore, le même code se comporte différemment sur les PC de mes collègues et change de comportement lorsque j'ajoute des lignes de code qui n'ont rien à voir avec symbs, comme par exemple créer un UnicodeString quelque part dans la fonction.

Je soupçonne que quelque chose est éteint avec l'initialisation de DateFormatSymbols ou les paramètres régionaux, mais pour la vie de moi, je ne peux pas comprendre quoi. Quelqu'un peut-il s'il vous plaît dites-moi pourquoi cela se produit et peut-être comment y remédier afin que je reçois toujours le nombre attendu de mois en count?

Répondre

0

vous devez initialiser uec:

UErrorCode uec;

et vous devez vérifier le résultat

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

voir error handling