Java基础——Local和国际化

本文详细介绍了Java中Local类实现的本地化功能,包括获取系统语言、构建Locale对象、ISO2/ISO3转换、数字、货币、百分比、日期时间格式化以及排序,展示了如何根据不同国家的习俗进行适当展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Local和国际化是什么?

不同国家的语言、文字、数字、日期都有不同显示,而Local可用根据系统语言对其进行显示

Local中的静态函数

获取当前的语言和国家

Locale defaultLocal = Locale.getDefault();

获取所有的语言及国家

Locale[] locales = Locale.getAvailableLocales();

获取所有国家

String[] countries = Locale.getISOCountries();

获取所有的语言

String[] languages = Locale.getISOLanguages();

获取某个国家对应的标签,如下为en-US

String s = Locale.US.toLanguageTag();

获取某个国家对应的语言,如下为en

String s = Locale.ENGLISH.toLanguageTag();

构建Local

使用标签生成Local

Locale locale = Locale.forLanguageTag("en-US");

通过构造函数生成Local

Locale locale=new Locale("en");
Locale locale=new Locale("en","US");

ISO2和ISO3转换

public static String getIOS3CountryByIOS2(String code) {
    return new Locale("", code).getISO3Country();
}

public static String getISO2CountryByISO3(String code) {
    String[] isoCountries = Locale.getISOCountries();
    for (String isoCountry : isoCountries) {
        if (new Locale("", isoCountry).getISO3Country().equals(code)) {
            return isoCountry;
        }
    }
    return "";
}

public static String getISO3LanguageByISO2(String code) {
    return new Locale(code).getISO3Language();
}

/*public static String getISO2LanguageByISO3(String code) {
        String[] isoLanguages = Locale.getISOLanguages();
        for (String isoLanguage : isoLanguages) {
            if (new Locale(isoLanguage).getLanguage().equals(code)) {
                return isoLanguage;
            }
        }
        return "";
    }*/

显示名字

getDisplayName()输出Local的名字,如下为English (United States)、英语 (美国)

Locale locale=new Locale("en","US");
System.out.println(locale.getDisplayName());
System.out.println(locale.getDisplayName(Locale.CHINA));

数字格式化

如以中国数字的形式解析123456.78,则为123,456.78

NumberFormat numberInstance = NumberFormat.getNumberInstance(Locale.CHINA);
String format = numberInstance.format(123456.78);
System.out.println(format);

反解析123,456.78,Number类型不能转为基本数据类型,需调用doubleValue(),格式不正确抛出ParseException

String s = "123,456.78";
NumberFormat numberInstance = NumberFormat.getNumberInstance(Locale.CHINA);
Number parse = null;
try {
    parse = numberInstance.parse(s.trim());
} catch (ParseException e) {
    e.printStackTrace();
}
if (parse != null) {
    double b = parse.doubleValue();
    System.out.println(b);
}

货币格式化

如以中国货币的形式解析123456.78,则为¥123,456.78

NumberFormat currencyInstance = NumberFormat.getCurrencyInstance(Locale.CHINA);
String format = currencyInstance.format(123456.78);
System.out.println(format);

反解析¥123,456.78,Number类型不能转为基本数据类型,需调用doubleValue(),格式不正确抛出ParseException

String s = "¥123,456.78";
Number parse = null;
NumberFormat currencyInstance = NumberFormat.getCurrencyInstance(Locale.CHINA);
try {
    parse = currencyInstance.parse(s.trim());
} catch (ParseException e) {
    e.printStackTrace();
}
if (parse != null) {
    double b = parse.doubleValue();
    System.out.println(b);
}

若同时用两种货币结算,又不想创建两个NumberFormat实例,如在中国用美元支付则显示US$123,456.78

NumberFormat currencyInstance = NumberFormat.getCurrencyInstance(Locale.CHINA);
currencyInstance.setCurrency(Currency.getInstance(Locale.US));
String format = currencyInstance.format(123456.78);
System.out.println(format);

百分比格式化

如以中国百分比的形式解析0.2,则为20%

 NumberFormat percentInstance = NumberFormat.getPercentInstance(Locale.CHINA);
 String format = percentInstance.format(0.2);
 System.out.println(format);

反解析20%,Number类型不能转为基本数据类型,需调用doubleValue(),格式不正确抛出ParseException

String s = "20%";
NumberFormat percentInstance = NumberFormat.getPercentInstance(Locale.CHINA);
Number parse = null;
try {
    parse = percentInstance.parse(s);
} catch (ParseException e) {
    e.printStackTrace();
}
if (parse != null) {
    double b = parse.doubleValue();
    System.out.println(b);
}

时间日期格式化

格式化时间日期需要考虑:

  • 月份和星期的数字应该用本地语言
  • 年月日的顺序符合本地习惯
  • 公历可能并不是本地首选表示方法
  • 需考虑本地的时区

使用DateTimeFormatter.ofLocalizedDate格式化LocalDate

如下输出:

  • 2021-12-01
  • 12/1/21
  • Dec 1, 2021
  • December 1, 2021
  • Wednesday, December 1, 2021
LocalDate today = LocalDate.now();
System.out.println(today);

DateTimeFormatter shortDateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
System.out.println(shortDateFormatter.format(today));

DateTimeFormatter mediumDateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
System.out.println(mediumDateFormatter.format(today));

DateTimeFormatter longDateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
System.out.println(longDateFormatter.format(today));

DateTimeFormatter fullDateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
System.out.println(fullDateFormatter.format(today));

若要指定国家,则在后面添加withLocale(Local local)

DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).withLocale(Locale.CHINA);

如上改为中国则输出

  • 2021-12-01
  • 2021/12/1
  • 2021年12月1日
  • 2021年12月1日
  • 2021年12月1日星期三

使用DateTimeFormatter.ofLocalizedTime格式化LocalTime

如下输出(FormatStyle.LONG和FormatStyle.FULL只适用于ZonedDateTime)

  • 09:06:01.582
  • 9:06 AM
  • 9:06:01 AM
LocalTime today = LocalTime.now();
System.out.println(today);

DateTimeFormatter shortTimeFormatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
System.out.println(shortTimeFormatter.format(today));

DateTimeFormatter mediumTimeFormatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM);
System.out.println(mediumTimeFormatter.format(today));

/*DateTimeFormatter longTimeFormatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.LONG);
System.out.println(longTimeFormatter.format(today));
DateTimeFormatter fullTimeFormatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.FULL);
System.out.println(fullTimeFormatter.format(today));*/

若要指定国家,则在后面添加withLocale(Local local)

DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT).withLocale(Locale.CHINA);

如上改为中国则输出

  • 09:23:18.817
  • 上午9:23
  • 上午9:23:18

使用DateTimeFormatter.ofLocalizedDateTime格式化localDateTime

如下输出(FormatStyle.LONG和FormatStyle.FULL只适用于ZonedDateTime)

  • 2021-12-01T09:11:34.939
  • 12/1/21, 9:11 AM
  • Dec 1, 2021, 9:11:34 AM
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);

DateTimeFormatter shortDateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
System.out.println(shortDateTimeFormatter.format(localDateTime));

DateTimeFormatter mediumDateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
System.out.println(mediumDateTimeFormatter.format(localDateTime));

/*DateTimeFormatter longDateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
System.out.println(longDateTimeFormatter.format(localDateTime));
DateTimeFormatter fullDateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL);
System.out.println(fullDateTimeFormatter.format(localDateTime));*/

若要指定国家,则在后面添加withLocale(Local local)

DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT).withLocale(Locale.CHINA);

如上改为中国则输出

  • 2021-12-01T09:27:37.435
  • 2021/12/1 上午9:27
  • 2021年12月1日 上午9:27:37

使用DateTimeFormatter.ofLocalizedDateTime格式化ZonedDateTime

如下输出:

  • 2021-12-01T09:15:36.639Z[GMT]
  • 12/1/21, 9:15 AM
  • Dec 1, 2021, 9:15:36 AM
  • December 1, 2021 at 9:15:36 AM GMT
  • Wednesday, December 1, 2021 at 9:15:36 AM Greenwich Mean Time
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println(zonedDateTime);

DateTimeFormatter shortDateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
System.out.println(shortDateTimeFormatter.format(zonedDateTime));

DateTimeFormatter mediumDateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
System.out.println(mediumDateTimeFormatter.format(zonedDateTime));

DateTimeFormatter longDateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
System.out.println(longDateTimeFormatter.format(zonedDateTime));

DateTimeFormatter fullDateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL);
System.out.println(fullDateTimeFormatter.format(zonedDateTime));

若要指定国家,则在后面添加withLocale(Local local)

DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT).withLocale(Locale.CHINA);

如上改为中国则输出

  • 2021-12-01T10:34:31.890Z[GMT]
  • 2021/12/1 上午10:34
  • 2021年12月1日 上午10:34:31
  • 2021年12月1日 GMT+00:00 上午10:34:31
  • 2021年12月1日星期三 格林尼治标准时间 上午10:34:31

排序格式化

对于String类型的比较,其compareTo方法使用的是UTF-16编码,如有些国家认为a和A不应该排一起,此时可调用Collator获取不同国家的字符串比较器

List<String> list = new ArrayList<>();
list.add("A");
list.add("a");
list.add("b");
Collator collator = Collator.getInstance(Locale.KOREA);
list.sort(collator);
System.out.println(list);
智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识点解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“橙点同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值