本文介绍了使用SimpleDateFormat(字符串,区域设置)分析法语区域设置时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的Java端有一段这样的代码:
private static DateFormat getHourFormatter(){
//DateFormatSymbols dateFormatSymbols = new DateFormatSymbols(_locale);
Locale locale = Locale.FRENCH; //locale : "fr"
DateFormat hourFormatter = new SimpleDateFormat( "hh:mm a",locale); //hourFormatter: simpleDateFormat@103068 locale: "fr"
hourFormatter.setTimeZone( TimeZone.getTimeZone("GMT") );
return hourFormatter; //hourFormatter: SimpleDateFormat@103068
}
protected static boolean isHoursTimeStringValid( String hourDisplay ) {
try {
getHourFormatter().parse( hourDisplay ); //hourDisplay: "01:01 Matin"
return true;
} catch (ParseException e) { //e: "java.text.ParseException: Upparseable date "01:01 Matin"
return false;
}
}
如果我将区域设置值更改为US,则它在英语区域设置下工作正常。
但对于法语区域设置,它引发分析错误。
java.ext.ParseException:可升级日期”01:01 Matin”
为了更好地理解,我已将调试信息添加为注释行
推荐答案
感谢大家的回答。
如前所述,我无法更改代码库。
所以,我所做的是:
public void setBeginAMPM( String ampm ) {
if(ampm.equals(new I18NStringFactory().getString("Calendar", _locale , "default.time.am" ))) {
_beginAMPM = "AM";
}
else if(ampm.equals(new I18NStringFactory().getString("Calendar", _locale , "default.time.pm" ))) {
_beginAMPM = "PM";
}
else{
_beginAMPM = ampm;
}
}
public void setEndAMPM( String ampm ) {
if(ampm.equals(new I18NStringFactory().getString("Calendar", _locale , "default.time.am" ))) {
_endAMPM = "AM";
}
else if(ampm.equals(new I18NStringFactory().getString("Calendar", _locale , "default.time.pm" ))) {
_endAMPM = "PM";
}
else{
_endAMPM = ampm;
}
}
_LOCALE值我从一个操作类传递到另一个类。如果它不是英语,它将进入If块之一,或者如果是英语,它将默认进入Else块。根据本地值,它从属性文件中获取AM/PM值并进行相应的转换。
我只是将AM/PM值从其他区域设置特定的语言修改为英语,因为SimpleDateFormat()仅支持英语。
你们可以称它为丑陋的黑客,但你猜怎么着,它解决了我的目的。
这篇关于使用SimpleDateFormat(字符串,区域设置)分析法语区域设置时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。