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

the*_*ava 50 android

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

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)

为什么" 要获取本地格式使用getDateInstance(),getDateTimeInstance()或getTimeInstance(),或使用新的SimpleDateFormat(字符串模板,区域设置区域设置),例如Locale.US用于ASCII日期 "此错误来自此行.

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

jas*_*ery 117

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

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

  • @Deqing如果您在具有其他国家/地区的语言环境的计算机上忽略此项,则从计算机返回的日期可能不包含您返回的与格式化字符串匹配的预期信息.很像','和'.' 关于跨系统的数字的符号,时间可以用不同国家的不同方式表示,并且可能具有比预期更多或更少的组件.通过指定,您一定会得到您所要求的. (12认同)
  • 如果我忽略这个警告会怎么样? (3认同)

kip*_*ip2 14

但要小心getDefault,因为它可能不适合所有用例,特别是机器可读的输出.来自文档:

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


mig*_*uel 10

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

public SimpleDateFormat(String pattern) {
    this(pattern, Locale.getDefault());
}
Run Code Online (Sandbox Code Playgroud)

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

最好的办法是禁用哑检.