本文介紹了使用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(字符串,區域設置)分析法語區域設置時出錯的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,