SimpleDateFormat(String模板,Locale语言环境),例如Locale.US用于ASCII日期

时间:2013-07-23 10:37:10

标签: android

Issue:直接使用SimpleDateFormat而不使用显式语言环境 Id:SimpleDateFormat

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

为什么“获取本地格式使用getDateInstance(),getDateTimeInstance()或getTimeInstance(),或者使用新的SimpleDateFormat(String模板,Locale语言环境),例如Locale.US用于ASCII日期“这条线上的错误。

http://developer.android.com/reference/java/text/SimpleDateFormat.html

3 个答案:

答案 0 :(得分:112)

要删除警告,只需在实例化日期格式对象时添加Locale.getDefault()作为第二个参数。 例如

 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
                    java.util.Locale.getDefault());

答案 1 :(得分:14)

小心getDefault,因为它可能不适合所有用例,尤其是机器可读输出。来自docs

  

默认语言环境不适合机器可读输出。最好的选择通常是Locale.US - 这个语言环境保证可以在所有设备上使用,并且它没有令人惊讶的特殊情况并经常使用(特别是用于计算机 - 计算机通信)这意味着它往往是最有效的选择。

答案 2 :(得分:9)

这是一个愚蠢的皮棉警告。如果查看SimpleDateFormat构造函数源代码,它将获得默认语言环境。

public SimpleDateFormat(String pattern) {
    this(pattern, Locale.getDefault());
}

因此,在代码中添加它是多余的,并且不必要地冗长。 Locale.getDefault()几乎总是你想要的,因为这是用户设备的设置。如果由于某种原因你需要它总是返回,例如,"星期一"无论用户的语言设置为什么,都可以指定Locale.US,但这似乎是一种罕见的情况。

最好的办法是禁用哑巴检查。