我是否需要担心这个警告?如果我忽略警告怎么办?
这个警告意味着什么:
要获取本地格式,请使用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所示。
答案 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
。