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