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

2022-08-31 20:55:19

我需要担心这个警告吗?如果我忽略该警告,该怎么办?
此警告的含义:
要获取本地格式,请使用 、 或 或 ,或 与 一起使用,例如日期。
在下面代码的第二行中。该应用程序使用代码工作正常。我想显示日期,例如, .getDateInstance()getDateTimeInstance()getTimeInstance()new SimpleDateFormat(String template, Locale locale)Locale.USASCII19 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;
}

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


答案 1

您当前正在使用 SimpleDateFormat(String) 构造函数。这意味着默认区域设置,并且正如 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());

答案 2

您可以忽略它,但警告是为了让您知道日期可能会为使用其他语言的用户意外显示。如果要在自己的区域设置中强制使用格式,请使用(或与您的格式要求匹配的任何区域设置)。否则,请使用 getInstance() 方法之一进行本地化格式设置。Locale.US


推荐