SimpleDateFormat警告要获取本地格式,请使用getDateInstance(),getDateTimeInstance()或getTimeInstance(),

时间:2014-11-19 17:30:14

标签: java android simpledateformat

我是否需要担心这个警告?如果我忽略警告怎么办? 这个警告意味着什么:
要获取本地格式,请使用getDateInstance()getDateTimeInstance()getTimeInstance(),或使用new SimpleDateFormat(String template, Locale locale)代替Locale.US ASCII日期。
在下面的代码的第二行。该应用程序与代码正常工作。我想显示日期,例如19 Nov 2014

public static String getFormattedDate(long calendarTimeInMilliseconds) {
    SimpleDateFormat sdfDate = new SimpleDateFormat("d MMM yyyy");  //ON THIS LINE
    Date now = new Date();
    now.setTime(calendarTimeInMilliseconds);
    String strDate = sdfDate.format(now);
    return strDate;
}

我认为这是格式化日期的正确方法,如here所示。

3 个答案:

答案 0 :(得分:45)

您当前正在使用SimpleDateFormat(String)构造函数。这意味着默认语言环境,并且Locale文档告诉您,be wary of the default locale可以在各种系统上生成意外输出。

您应该使用SimpleDateFormat(String, Locale)构造函数。它将接收一个额外的参数 - 您要使用的区域设置。 如果要确保输出以一致的方式是机器可读的(无论用户的实际区域设置如何,总是看起来相同),您可以选择Locale.US。如果您不关心机器可重复性,可以明确将其设置为使用Locale.getDefault()

在示例代码中使用这些代码看起来像这样:

// for US
SimpleDateFormat sdfDate = new SimpleDateFormat("d MMM yyyy", Locale.US);

// or for default
SimpleDateFormat sdfDate = new SimpleDateFormat("d MMM yyyy",
        Locale.getDefault());

答案 1 :(得分:3)

您可以忽略它,但会出现警告,告知您使用其他语言的用户可能会意外显示日期。如果要在自己的语言环境中强制使用格式,请使用Locale.US(或任何符合格式要求的语言环境)。否则,使用其中一个getInstance()方法进行本地化格式化。

答案 2 :(得分:1)

与kotlin相同

        //example long 1372339860 
        fun getDateTime(unixSeconds: Long): String {
         val date = java.util.Date(unixSeconds * 1000L)

         val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss z", Locale.getDefault())
         return simpleDateFormat.format(date)
        }

像这样调用getDateTime(1372339860)

它将返回27.6.2013 15:31:00 GMT +2 GMT+2,因为我在德国,我们有夏令时。您也可以使用Locale.US