编程语言
首页 > 编程语言> > 如何在Java中使用本地化时完整显示年份?

如何在Java中使用本地化时完整显示年份?

作者:互联网

private String setDate(int day) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(new Date());
    cal.add(Calendar.DATE, + day);
    DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
    String formattedDate = df.format(cal.getTime());
    return formattedDate;
}

上面的方法返回Locale.UK的“14/06/12”和Locale.US的“06/14/12”.

我怎样才能让它全年返回,即“14/06/2012”为美国语言环境,“06/14/2012”为英国语言环境?

解决方法:

JHS的答案几近完成.唯一需要做的就是让它适用于所有语言环境.

import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Locale;

class ChangeDateFormat
{
    private String setDate(int day, Locale locale) {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, +day);
        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
        if (df instanceof SimpleDateFormat)
        {
            SimpleDateFormat sdf = (SimpleDateFormat) df;
            // To show Locale specific short date expression with full year
            String pattern = sdf.toPattern().replaceAll("y+","yyyy");
            sdf.applyPattern(pattern); 
            return sdf.format(cal.getTime());
        }
        String formattedDate = df.format(cal.getTime());
        return formattedDate;
    }

    public static void main(String[] args)
    {
        ChangeDateFormat cdf = new ChangeDateFormat();        
        System.out.println(cdf.setDate(1, Locale.JAPAN));
    }
}

遵循Greg的评论(感谢Greg),以下是javadoc的相关说明:

“如果你想要更多地控制格式或解析,(或者想让你的用户获得更多控制权),你可以尝试将从工厂方法获得的DateFormat转换为SimpleDateFormat.这对大多数国家都有效;只是记得把它放在一个试块里以防万一你遇到一个不寻常的.“

标签:java,date,date-format
来源: https://codeday.me/bug/20190723/1512662.html