52

Issue: 直接使用 SimpleDateFormat 没有明确的语言环境 Id: SimpleDateFormat

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

为什么“要获取本地格式,请使用 getDateInstance()、getDateTimeInstance() 或 getTimeInstance(),或使用新的 SimpleDateFormat(String template, Locale locale),例如 Locale.US for ASCII dates ”错误出现在这一行。

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

4

3 回答 3

126

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

 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
                    java.util.Locale.getDefault());
于 2013-07-23T10:49:30.887 回答
16

不过要小心getDefault,因为它可能不适用于所有用例,尤其是机器可读的输出。从文档

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

于 2015-06-30T07:25:52.473 回答
12

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

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

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

最好的办法是禁用愚蠢的检查。

于 2015-11-12T23:48:06.210 回答