Java如何获取特定模式和语言环境的格式化日期?

如果要更改DateFormat提供的格式设置样式,可以使用SimpleDateFormat类。 SimpleDateFormat类对语言环境敏感。

如果不使用Locale参数实例化SimpleDateFormat,它将根据默认的Locale格式化日期和时间。 模式和语言环境都确定格式。 对于相同的模式,如果语言环境有所不同,SimpleDateFormat可能会以不同的格式设置日期和时间。

package org.nhooo.example.text;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class SimpleDateFormatChangeLocalePattern {
    public static void main(String[] args) {
        String pattern = "dd-MMM-yyyy";
        Date today = new Date();

        // 根据给定的模式获取格式化的日期。
        // 在这里,只有模式作为参数传递
        // SimpleDateFormat构造函数,因此它将格式化
        // 根据默认语言环境设置日期。
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        String local = sdf.format(today);
        System.out.println("Date in default locale: " + local);

        Locale[] locales = {
            Locale.CANADA,
            Locale.FRANCE,
            Locale.GERMANY,
            Locale.US,
            Locale.JAPAN
        };

        for (Locale locale : locales) {
            // 根据每个区域设置的给定格式设置日期格式。
            sdf = new SimpleDateFormat(pattern, locale);
            String after = sdf.format(today);
            System.out.println(locale.getDisplayCountry() + " | format: " + after);
        }
    }
}

以下是在同一日期格式中格式化日期但在语言环境中有所不同时产生的输出结果的各种变化

Date in default locale: 12-Apr-2018
Canada | format: 12-Apr-2018
France | format: 12-avr.-2018
Germany | format: 12-Apr-2018
United States | format: 12-Apr-2018
Japan | format: 12-4-2018