Java Locale.ENGLISH还是Locale.US更适合构造与区域设置无关的SimpleDataFormat进行字符串解析

Java Locale.ENGLISH还是Locale.US更适合构造与区域设置无关的SimpleDataFormat进行字符串解析,java,android,Java,Android,我知道我将始终从服务器获取以下日期格式 2017-10-16 在客户端设备中运行SimpleDataFormat.parse(“2017-10-16”),并返回表示2017年10月16日的日期 我在想,我应该用吗 new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); 或 我已经测试了这两个,它们工作得很好 这是我正在使用的测试代码 public class JavaApplication23 { /** * @param

我知道我将始终从服务器获取以下日期格式

2017-10-16
在客户端设备中运行
SimpleDataFormat.parse(“2017-10-16”)
,并返回表示2017年10月16日的日期

我在想,我应该用吗

new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);

我已经测试了这两个,它们工作得很好

这是我正在使用的测试代码

public class JavaApplication23 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        for (Locale locale : Locale.getAvailableLocales()) {
            Locale.setDefault(locale);

            // This breaks the thing!
            //SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

            // This is OK.
            //SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);

            // This is OK too.
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.US);

            Date date;
            try {
                date = simpleDateFormat.parse("2017-10-16");

                if(
                        date.getYear() != 117 || 
                        date.getMonth() != 9 || 
                        date.getDate() != 16
                ) {
                    System.out.println(locale + " locale having problem to parse " + date);
                }
            } catch (ParseException ex) {
                Logger.getLogger(JavaApplication23.class.getName()).log(Level.SEVERE, null, ex);
                ex.printStackTrace();
            }            
        }
    }    
}
似乎要使用
Locale.ENGLISH
Locale.US
都可以

然而,我担心我可能会错过一些边缘案例


我想知道,是
Locale.ENGLISH
还是
Locale.US
更适合构造独立于语言环境的
SimpleDateFormat
进行字符串解析?

在您的情况下,语言环境并不重要,但是您可以看到这里的区别:

DateFormat.getDateInstance(DateFormat.SHORT, Locale.US).format(new Date()))
11/10/17

DateFormat.getDateInstance(DateFormat.SHORT, Locale.UK).format(new Date())) 
10/11/17
请注意,我们需要改变国家,而不是语言

如果需要独立于语言环境的表示,请使用。所有编程语言/框架都能理解它


有关更多详细信息,请参见。

谢谢。我可以看到您的用例,关于为什么国家/地区很重要。我的案例只使用了
parse
方法,我使用了“yyyy-MM-dd”来明确指定“日期之前的月份”。所以,我想就我的情况来说,使用Locale.ENGLISH就可以了?是的,只要使用阿拉伯数字,任何本地语言都可以。
DateFormat.getDateInstance(DateFormat.SHORT, Locale.US).format(new Date()))
11/10/17

DateFormat.getDateInstance(DateFormat.SHORT, Locale.UK).format(new Date())) 
10/11/17