Locale a = new Locale("zh");Locale b = new Locale("zh","CN");Locale c = new Locale("zh","CN","B");為了方便起見, java SE預(yù)定義了大量的locale對象,Locale.CHINA,Locale.CANADA等。Java SE還預(yù)定義了大量的語言locale,它們只設(shè)定了語言而沒有位置:Locale.CHINESE,Locale.ENGLISH等。
除了構(gòu)建一個locale或使用預(yù)定義的locale外,還可以有兩種方法來獲得一個locale對象。Locale類的靜態(tài)getdefault方法可以獲得作為本地操作系統(tǒng)的一部分而存放的默認(rèn)locale。可以調(diào)用setDefault來改變默認(rèn)的Java locale;但是,這種改變只對你的程序有效,不會對操作系統(tǒng)產(chǎn)生影響。最后,對于所有依賴locale的類,可以返回一個它們所支持的locale數(shù)組。
Locale[] a = DateFormat.getAvailableLocales() 一旦有了一個locale,你能用它做什么呢?答案是它所能做的事情很有限。 Locale類中惟一有用的是那些定義語言和國家代碼的方法,其中最重要的一個是getdisplayName,它返回一個描述locale的字符串。這個字符串并不包含前面所說的由兩個字母組成的代碼,而是以一種面向用戶的形式來表現(xiàn)。Locale a = new Locale("zh","CN"); System.out.PRintln(a.getDisplayName());輸出 中文(中國) System.out.println(a.getDisplayName(Locale.JAPANESE));中國語 (中華人民共和國) System.out.println(a.getDisplayName(Locale.ENGLISH));Chinese (China)LocaleLocale(String language)Locale(String language, String country)Locale(String language, String country, String variant)用給定的語言、國家和變量創(chuàng)建一個locale。static Locale getDefault()返回默認(rèn)的locale。static void setDefault(Locale loc)設(shè)定默認(rèn)的locale。String getDisplayName()返回一個在當(dāng)前的locale中所表示的用來描述locale的名字。String getDisplayName(Locale loc)返回一個在給定的locale中所表示的用來描述locale的名字。String getLanguage()返回語言代碼,它是兩個小寫字母組成的ISO-639代碼。String getDisplayLanguage()返回在當(dāng)前l(fā)ocale中所表示的語言名稱。String getDisplayLanguage(Locale loc)返回在給定locale中所表示的語言名稱。String getCountry()返回國家代碼,它是由兩個大寫字母組成的ISO-3166代碼。String getDisplayCountry()返回在當(dāng)前l(fā)ocale中所表示的國家名。String getDisplayCountry(Locale loc)返回在當(dāng)前l(fā)ocale中所表示的國家名。String getVariant()返回locale中變量的字符串。String getDisplayVariant()返回在當(dāng)前l(fā)ocale中所表示的變量名稱。String getDisplayVariant(Locale loc)返回在給定locale中所表示的變量名稱。String toString()返回locale的描述,包括語言、國家和變量,用下劃線分隔(比如, “ de_CH”)。數(shù)字格式Java類庫提供了一個格式器(formatter)對象的集合,可以對java.text包中的數(shù)字值進行格式化和解析。1.得到locale對象。2.使用一個“工廠方法”得到一個格式器對象。3.使用這個格式器對象來完成格式化和解析工作。
工廠方法是NumberFormat類的一個靜態(tài)方法,它接受一個Locale類型的參數(shù)。總共有3個工廠方法: getNumberInstance、 getCurrencyInstance和getPercentInstance,這些方法返回的對象可以分別對數(shù)字、貨幣量和百分比進行格式化和解析。
Locale a = new Locale("de","DE"); NumberFormat nf = NumberFormat.getCurrencyInstance(a); double b = 1234.57687; String string = nf.format(b); System.out.println(string);輸出1.234,58 € 相反地,如果要想讀取一個按照某個locale的規(guī)定而輸入或存儲的數(shù)字,那么就需要使用parse方法。比如,下面的代碼解析了用戶輸入到文本框中的值。 parse方法能夠處理小數(shù)點和分隔符以及其他語言中的數(shù)字。parse的返回類型是抽象類型的Number。返回的對象是一個Double或Long的包裝器類,這取決于被解析的數(shù)字是否是浮點數(shù)。如果兩者都可以接 受,可以使用Number類中的doubleValue方法來讀取被包裝的數(shù)字。Number類型的對象并不能自動轉(zhuǎn)換成相關(guān)的基本類型,因此,不能直接將一個Number對象賦給一個基本類型,而應(yīng)該使用doubleValue或intValue方法。 如果數(shù)字文本的格式不正確,該方法會拋出一個ParseException異常。例如,字符串以空格開頭是不允許的(可以調(diào)用trim方法來去掉空格)。但是,任何跟在數(shù)字之后的字符都將被忽略,所以這些跟在后面的字符是不會引起異常的。可以用靜態(tài)的getAvailableLocales方法得到一個當(dāng)前所支持的locale對象列表。這個方法返回一個locale對象數(shù)組,從中可以獲得針對它們的數(shù)字格式器對象。可以用DecimalFormat df = new DecimalFormat("#.00");來處理數(shù)字。表示小數(shù)點后兩位,不足補0。但是0.12format后變?yōu)?12;
NumberFormatstatic Locale[] getAvailableLocales()返回一個Locale對象的數(shù)組,其成員包含有NumberFormat 格式器。static NumberFormat getNumberInstance()static NumberFormat getNumberInstance(Locale l)static NumberFormat getCurrencyInstance()static NumberFormat getCurrencyInstance(Locale l)static NumberFormat getPercentInstance()static NumberFormat getPercentInstance(Locale l)當(dāng)當(dāng)前的或給定的locale提供處理數(shù)字、貨幣值或百分比的格式器。String format(double x)String format(long x)對給定的浮點數(shù)或整數(shù)進行格式化并以字符串的形式返回結(jié)果。Number parse(String s)解析給定的字符串并返回數(shù)字值,如果輸入字符串描述了一個浮點數(shù),返回類型就是Double,否則返回類型就是Long。字符串必須以一個數(shù)字開頭;以空格開頭是不允許的。數(shù)字之后可以跟隨其他字符,但它們都將被忽略。解析失敗時拋出ParseException異常。void setParseIntegerOnly(boolean b)boolean isParseIntegerOnly()設(shè)置或獲取一個標(biāo)識,該標(biāo)識指示這個格式器是否應(yīng)該只解析整數(shù)值。void setGroupingUsed(boolean b)boolean isGroupingUsed()設(shè)置或獲取一個標(biāo)識,該標(biāo)識指示這個格式器是否會添加十進制分隔符(比如100 000)。void setMinimumIntegerDigits(int n)int getMinimumIntegerDigits()void setMaximumIntegerDigits(int n)int getMaximumIntegerDigits()void setMinimumFractionDigits(int n)int getMinimumFractionDigits()void setMaximumFractionDigits(int n)int getMaximumFractionDigits()設(shè)置或獲取整數(shù)或小數(shù)部分所允許的最大或最小位數(shù)。 為了格式化貨幣值,可以使用NumberFormat.getCurrencyInstance方法。但是,這個方法的靈活性不好,它返回一個只針對一種貨幣的格式器。使用Currency類來控制被格式器所處理的貨幣。可以通過將一個貨幣標(biāo)識符傳給靜態(tài)的Currency.getInstance方法來得到一個Currency對象,然后對每一個格式器都調(diào)用setCurrency方法。Locale a = new Locale("de","DE"); NumberFormat nf = NumberFormat.getCurrencyInstance(a); nf.setCurrency(Currency.getInstance("zh"));Curreneystatic Currency getInstance(String currencyCode)static Currency getInstance(Locale locale)返回與給定的ISO 4217貨幣代號匹配的Currency實例或返回與給定locale對應(yīng)的國家。String toString()String getCurrencyCode()獲取貨幣的ISO 4217代碼。String getSymbol()String getSymbol(Locale locale)根據(jù)默認(rèn)或給定的locale得到貨幣的格式化符號。比如美元的格式化符號可能是“ $”或“ US$”,具體是哪種形式依賴于locale。int getDefaultFractionDigits()獲取貨幣值小數(shù)點后的默認(rèn)位數(shù)。時間和日期當(dāng)格式化日期和時間時,需要考慮4個與locale相關(guān)的問題:月份和星期應(yīng)該用本地語言來表示。年月日的順序要符合本地習(xí)慣。公歷可能不是本地首選的日期表示方法。必須要考慮本地的時區(qū)。 Java的DateFormat類可以處理這些問題。它和NumberFormat類很相似,用起來很容易。首先,得到一個locale,可以使用默認(rèn)的locale或調(diào)用靜態(tài)的getAvailableLocales方法來得到一個支持日期格式化的locale數(shù)組。
DateFormat df = DateFormat.getDateInstance(style, Locale); DateFormat.getTimeInstance(style, aLocale) DateFormat.getDateTimeInstance(dateStyle, timeStyle, aLocale)為了設(shè)定想要的風(fēng)格,這些工廠方法有一個參數(shù),它可以是以下某個值:DateFormat.DEFAULTDateFormat.FULL (例如,按照美國locale,日期格式為 Wednesday, September 12, 2007 8:51:03 PM PDT)DateFormat.LONG (例如,按照美國locale,日期格式為September 12, 2007 8:51:03 PM PDT)DateFormat.MEDIUM (例如,按照美國locale,日期格式為Sep 12, 2007 8:51:03 PM)DateFormat.SHORT (例如,按照美國locale,日期格式為9/12/07 8:51 PM可以使用SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");來處理日期。DateFormatstatic Locale[] getAvailableLocales()返回一個Locale對象的數(shù)組,可以對這些對象使用DateFormat格式器。static DateFormat getDateInstance(int dateStyle)static DateFormat getDateInstance(int dateStyle, Locale l)static DateFormat getTimeInstance(int timeStyle)static DateFormat getTimeInstance(int timeStyle, Locale l)static DateFormat getDateTimeInstance(int dateStyle, int timeStyle)static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale l)為默認(rèn)或指定的locale返回一個日期格式器、時間格式器或日期和時間的格式器。參數(shù): dateStyle, timeStyle DEFAULT、 FULL、 LONG、 MEDIUM、 SHORT之一String format(Date d)對給定的日期/時間進行格式化,并返回結(jié)果。Date parse(String s)解析給定的字符串,返回其中描述的日期/時間。字符串必須以日期或時間開頭;以空格開頭是不允許的。日期后可以跟其他字符,但它們會被忽略。如果解析沒有成功,則拋出ParseException異常。void setLenient(boolean b)boolean isLenient()設(shè)置或獲得一個標(biāo)志,它標(biāo)記解析時是采用寬松的還是嚴(yán)格的方式。在寬松模式下,像February 30, 1999這樣的日期會被自動轉(zhuǎn)換成March 2, 1999。它是默認(rèn)的模式。void setCalendar(Calendar cal)Calendar getCalendar()設(shè)置或獲得Calendar對象,可以用它來從Date對象中獲取年、月、日、小時、分鐘和秒。如果不想使用該locale的默認(rèn)日歷(一般是公歷),就使用這個方法。void setTimeZone(TimeZone tz)TimeZone getTimeZone()設(shè)置或獲得格式化時間的時區(qū)對象。如果不想讓locale使用默認(rèn)時區(qū),可以使用這個方法。默認(rèn)時區(qū)是默認(rèn)locale的時區(qū),可以從操作系統(tǒng)中得到它。對于其他locale,應(yīng)該使用和地理位置相對應(yīng)的時區(qū)。void setNumberFormat(NumberFormat f)NumberFormat getNumberFormat()設(shè)置或獲得數(shù)字格式,用它來格式化那些表示年、月、日、小時、分、秒的時間。
新聞熱點
疑難解答