2014-11-19 11 views
17

Muss ich mir wegen dieser Warnung Sorgen machen? Was passiert, wenn ich die Warnung ignoriere?
Was diese Warnung bedeutet das:
Um lokale Formatierung getDateInstance(), getDateTimeInstance() oder getTimeInstance() verwenden oder new SimpleDateFormat(String template, Locale locale) verwendet mit zum Beispiel Locale.US für ASCII Daten.
In der 2. Zeile des Codes unten. Die App funktioniert gut mit dem Code. Ich wollte das Datum anzeigen, zB 19 Nov 2014.Warnung zu SimpleDateFormat Um lokale Formatierung zu erhalten, verwenden Sie getDateInstance(), getDateTimeInstance() oder getTimeInstance(),

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; 
} 

Ich denke, das ist eine richtige Art und Weise Datum zu formatieren als here gezeigt.

Antwort

32

Sie verwenden derzeit den SimpleDateFormat(String) Konstruktor. Dies impliziert das Standardgebietsschema und die Locale-Dokumentation sagt Ihnen, be wary of the default locale als unerwartete Ausgabe kann auf verschiedenen Systemen erstellt werden.

Sie sollten stattdessen den SimpleDateFormat(String, Locale) Konstruktor verwenden. Es wird einen zusätzlichen Parameter aufnehmen - das Gebietsschema, das Sie verwenden möchten. Wenn Sie sicherstellen möchten, dass die Ausgabe konsistent maschinenlesbar ist (unabhängig vom Gebietsschema des Benutzers immer gleich aussieht), können Sie Locale.US auswählen. Wenn Sie nicht an der Redierbarkeit von Computern interessiert sind, können Sie sie explizit auf Locale.getDefault() setzen.

die auf Ihrem Beispielcode Mit so etwas würde wie folgt aussehen:

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

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

Simple sdfDate = new Simple ("d MMM yyyy", Locale.getDefault()); Wird dies das Datum wie 19 Nov 2014 oder "d MMM yyyy" auch in anderer Sprache formatieren? –

+1

Die Vorlage wird immer noch "d MMM yyyy" bleiben, was für "Tag im Monat", "Monat im Jahr", "Jahr" steht, wie in [SimpleDateFormat] (http://developer.android.com/) zu sehen ist. Referenz/java/text/SimpleDateFormat.html), aber der beste Weg, um sicherzustellen, ist, sich selbst zu testen, indem Sie Ihr Gerät/Emulator auf ein benutzerdefiniertes Gebietsschema umschalten, das Ihnen zeigen wird, wie es im wirklichen Leben funktioniert. –

+0

Locale.getDefault(). Daher ist das Standardgebietsschema für Aufgaben geeignet, bei denen dem Benutzer Daten präsentiert werden. In diesem Fall möchten Sie die Datums-/Uhrzeitformate des Benutzers, Zahlenformate, Regeln für die Umwandlung in Kleinbuchstaben usw. verwenden. In diesem Fall ist es sicher, die Bequemlichkeitsmethoden zu verwenden. –

2

Sie können es ignorieren, aber die Warnung ist da, um Sie wissen zu lassen, dass die Daten möglicherweise unerwartet für Benutzer angezeigt werden, die eine andere Sprache verwenden. Wenn Sie das Format in Ihrem eigenen Gebietsschema erzwingen möchten, verwenden Sie Locale.US (oder das Gebietsschema, das Ihren Formatanforderungen entspricht). Andernfalls verwenden Sie eine der Methoden getInstance() für lokalisierte Formatierung.