文章目录
- 前言
- 应用场景
- 国际化(Internationalization)
- 格式化(Formatting)
- 日期格式化
- 数字格式化
- 金额格式化
- 百分比形式格式化
- 获取Locale信息
前言
JDK(Java Development Kit)的Locale类用于表示特定的地理、文化和语言的环境信息。Locale对象包含了对应于特定地区或语言的信息,这对于国际化和本地化的应用程序是非常重要的。
应用场景
国际化(Internationalization)
国际化的应用程序中,Locale类用于支持不同地区和语言的用户界面。通过使用Locale对象,程序可以根据用户的首选语言和地区来加载相应的本地化资源文件,例如文本、图像和声音等。
IDEA新建语言资源文件
命名自己的资源文件名称,并选择自己要添加的语言
public class InternationalizationExample {public static void main(String[] args) {// 获取用户的默认LocaleLocale userLocale = Locale.ENGLISH;// 使用ResourceBundle加载本地化资源文件ResourceBundle messages = ResourceBundle.getBundle("Message", userLocale);// 获取本地化字符串String greeting = messages.getString("help");System.out.println(greeting);}
}
控制台输出:
格式化(Formatting)
日期格式化
Locale类用于格式化和解析日期、时间、数字和货币等信息。不同地区和语言对于这些格式的要求可能会有所不同,Locale对象允许应用程序适应用户的偏好。
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;public class DateFormatExample {public static void main(String[] args) {// 获取用户的默认LocaleLocale userLocale = Locale.getDefault();// 获取日期格式化对象DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, userLocale);// 格式化当前日期Date currentDate = new Date();String formattedDate = dateFormat.format(currentDate);System.out.println("Formatted Date: " + formattedDate);}
}
控制台输出
数字格式化
public class NumberFormatExample {public static void main(String[] args) {// 获取用户的默认LocaleLocale userLocale = Locale.getDefault();// 获取数字格式化对象NumberFormat numberFormat = NumberFormat.getInstance(userLocale);// 格式化数字double number = 1234567.8455;String formattedNumber = numberFormat.format(number);System.out.println("Formatted Number: " + formattedNumber);// 带货币符号的格式化String currencyFormattedNumber = NumberFormat.getCurrencyInstance(Locale.CHINA).format(number);System.out.println("Formatted Number with Currency Symbol: " + currencyFormattedNumber);}}
控制台打印效果
⚠️ number进行format的时候只会保留3位小数,并且进行四舍五入操作
如果想原样输出,但有带有货币符号的,我们可以这样做:
public class FormatNumber {public static void main(String[] args) {// 使用BigDecimal表示金额BigDecimal amount = new BigDecimal("1234.5678");// 获取中文环境的货币格式Locale chineseLocale = Locale.CHINA;Currency currency = Currency.getInstance(chineseLocale);String currencySymbol = currency.getSymbol();// 格式化BigDecimal为带有货币符号的字符串(不进行四舍五入)String formattedAmount = currencySymbol +amount;System.out.println("Original BigDecimal: " + amount);System.out.println("Formatted Amount (Currency, No Rounding): " + formattedAmount);}
}
金额格式化
public class DecimalFormatExample {public static void main(String[] args) {BigDecimal bigDecimal = new BigDecimal("1234567890.1234567890");DecimalFormat decimalFormat = new DecimalFormat("###,###,###,###.00");// 保留两位小数String format = decimalFormat.format(bigDecimal);System.out.println("格式化后的金额:"+format);}
}
百分比形式格式化
public class NumberFormatExample {public static void main(String[] args) {// 获取用户的默认LocaleLocale userLocale = Locale.getDefault();// 获取数字格式化对象NumberFormat numberFormat = NumberFormat.getInstance(userLocale);// 格式化数字double number = 1234567.8455;String formattedNumber = numberFormat.format(number);System.out.println("Formatted Number: " + formattedNumber);// 带货币符号的格式化String currencyFormattedNumber = NumberFormat.getCurrencyInstance(Locale.CHINA).format(number);System.out.println("Formatted Number with Currency Symbol: " + currencyFormattedNumber);// 百分比形式格式化String formattedNumberWithPercentSymbol = NumberFormat.getPercentInstance().format(0.43);System.out.println("Formatted Number with Percent Symbol: " + formattedNumberWithPercentSymbol);}
获取Locale信息
Locale类提供了一些方法,可以获取Locale的信息,例如语言代码、国家代码、显示名等。
public class LocalInfoExample {public static void main(String[] args) {Locale locale = Locale.getDefault();System.out.println("国家名称简写:"+locale.getCountry());System.out.println("国家名称全称:"+locale.getDisplayCountry());System.out.println("语言简写:"+locale.getLanguage());System.out.println("语言全称:"+locale.getDisplayLanguage());System.out.println("语言标记:"+locale.toLanguageTag());System.out.println("国家语言信息:"+locale.getDisplayName());}
}
更多用法可以参考JDK官方文档,或者参考这篇文章https://www.wenjiangs.com/doc/pn3sp3eu