2014-05-02 36 views
0

我真正想要做的是使用strftime("%x")以正確的順序格式化日期。在大多數平臺上撥打setlocale("")就足夠了。在Android上,我一直在收到!@#$美國的日期。Android NDK支持語言環境嗎?

那麼,Android不支持語言環境嗎?

回答

1

根據this答案是

號沒有在C庫/從本機代碼的語言環境不支持,這是故意的。 Elliot指出,你唯一的希望就是使用JNI來獲得相關的值。

0

編號setlocale()strftime()在Android NDK中不起作用,除非en_US佈局是您想要的。

我從Java的部分由當地語言:

pLocaleData->pLocaleLanguage = new Locale("en").getDefault().getLanguage(); 

而ANSI C localeconv()中的Android NDK不起作用:

struct lconv *localeconv(void); 

也越來越的用戶名的標準的Unix方式,在Android中不起作用。

char *p = getenv("USER"); 

所以你需要使用Java端,以獲得區域設置信息。

String LocaleCountry = new Locale("en").getDefault().getCountry(); 
String LocaleLanguage = new Locale("en").getDefault().getLanguage(); 
String LocaleCurrency = new DecimalFormatSymbols().getCurrency().toString(); 
String LocaleShortDateTimePattern =new SimpleDateFormat().toPattern(); 
char LocaleDecimalSeparator = new DecimalFormatSymbols().getDecimalSeparator(); 
char LocaleThousandSeparator = new DecimalFormatSymbols().getGroupingSeparator(); 
String LocaleThousandGrouping = 
     String.format("%d;0", new DecimalFormat().getMaximumFractionDigits()); 
String LocaleNegativePrefix = new DecimalFormat().getNegativePrefix(); 
String LocaleNegativeSuffix =new DecimalFormat().getNegativeSuffix(); 
String Operator = Utils.getQwnername(context); 
+0

看起來是一個主要的Android Java/Android實現(電話)在千位分隔符問題上的錯誤。該=新的DecimalFormatSymbols()。getGroupingSeparator();爲ISO標準/德國 - 瑞典等(非美國)千分組生成0xa0(ISO/IEC 8859-1 NBSP,不是UTF8)而不是0x20空格分隔符。這會導致Java代碼在使用時崩潰。在讀取0xa0 = new DecimalFormatSymbols()後,必須在Java代碼中將0xa0更改爲0x20。getGroupingSeparator();另見http://stackoverflow.com/questions/32374466/replace-grouping-separator-of-decimalformat-in-formatted-value。 –