Android中葡萄牙语(葡萄牙)调用getShortWeekdays()返回全星期名问题求助
Android中葡萄牙语(葡萄牙)下getShortWeekdays()返回完整星期名的解决办法
在Android开发中使用getShortWeekdays()方法获取星期短名称时,多数语言环境下都能正常返回缩写形式,但切换到**葡萄牙语(葡萄牙)**时,该方法返回的却是完整的星期名称,而非预期的短缩写。
问题复现代码
DateFormatSymbols symbols = new DateFormatSymbols(Locale.getDefault()); String[] dayNames = symbols.getShortWeekdays();
不同语言环境输出对比
- 英语(美国):
["", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
- 葡萄牙语(巴西):
["", "dom.", "seg.", "ter.", "qua.", "qui.", "sex.", "sáb."]
- 葡萄牙语(葡萄牙):
["", "domingo", "segunda", "terça", "quarta", "quinta", "sexta", "sábado"]
解决建议
方案1:自定义葡萄牙语(葡萄牙)的星期短名称映射
直接针对pt_PT Locale手动定义符合当地习惯的短星期名,这种方式不受系统Locale数据限制,结果更可控。
Locale currentLocale = Locale.getDefault(); String[] dayNames; // 检测当前是否为葡萄牙语(葡萄牙)环境 if ("pt".equals(currentLocale.getLanguage()) && "PT".equals(currentLocale.getCountry())) { dayNames = new String[]{"", "dom", "seg", "ter", "qua", "qui", "sex", "sáb"}; } else { DateFormatSymbols symbols = new DateFormatSymbols(currentLocale); dayNames = symbols.getShortWeekdays(); }
方案2:通过SimpleDateFormat动态生成短星期名
利用SimpleDateFormat的EEE格式符获取短星期名称,该方式依赖系统日期格式化实现,可能比getShortWeekdays()的Locale数据更准确。
SimpleDateFormat sdf = new SimpleDateFormat("EEE", Locale.getDefault()); Calendar calendar = Calendar.getInstance(); String[] shortWeekdays = new String[8]; shortWeekdays[0] = ""; // 索引0对应原方法的空字符串,无实际意义 // 循环生成一周7天的短名称 for (int i = 1; i <= 7; i++) { calendar.set(Calendar.DAY_OF_WEEK, i); shortWeekdays[i] = sdf.format(calendar.getTime()); }
内容的提问来源于stack exchange,提问作者Lazaros Papadopoulos
相关产品推荐
相关产品推荐

