2013-07-23 5 views
42

Issue: Mit Simple direkt ohne eine explizite locale Id: SimpleSimple (String-Vorlage, Locale locale) mit zum Beispiel Locale.US für ASCII Daten

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

Warum ist die "lokale Formatierung benutzen Sie getDateInstance(), getDateTimeInstance() oder getTimeInstance(), oder neues SimpleDateFormat (String-Vorlage, Gebietsschema-Gebietsschema) mit beispielsweise Locale.US für ASCII-Daten "Fehler in dieser Zeile.

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

+1

Es ist eine Warnung, kein Fehler – Blackbelt

Antwort

104

die Warnung entfernen nur Locale.getDefault() als zweites Argument hinzufügen, während das Objekt Datumsformat instanziieren. Eg.

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", 
        java.util.Locale.getDefault()); 
+0

Danke für die Antwort! – Si8

+3

Was passiert, wenn ich diese Warnung ignoriere? – Deqing

+8

@Deqing Wenn Sie dies auf einem Computer mit einem Gebietsschema eines anderen Landes ignorieren, enthält das vom Computer zurückgegebene Datum möglicherweise nicht die erwarteten Informationen, die Sie zurückgegeben haben, damit sie mit Ihrer formatierten Zeichenfolge übereinstimmen. Ähnlich wie "," und "." Da die Numerik systemübergreifend numerisch dargestellt wird, kann die Zeit in den verschiedenen Ländern unterschiedlich dargestellt werden und kann mehr oder weniger Komponenten enthalten als erwartet. Indem Sie angeben, sind Sie sicher, dass Sie bekommen, wonach Sie fragen. –

10

vorsichtig getDefault obwohl, da es nicht für alle Anwendungsfälle geeignet sein könnte, insbesondere maschinenlesbare Ausgabe. Von der :

Das Standardgebietsschema ist nicht geeignet für maschinenlesbare Ausgabe. Die beste Wahl dort ist normalerweise Locale.US - dieses Gebietsschema ist garantiert, auf allen Geräten verfügbar zu sein, und die Tatsache, dass es keine überraschenden Sonderfälle hat und häufig verwendet wird (besonders für die Computer-Computer-Kommunikation) bedeutet, dass es das ist effizienteste Wahl auch.

+0

Danke für die Referenz! – kirtan403

7

Es ist eine dumme Flusenwarnung. Wenn Sie sich den SimpleDateFormat-Konstruktorquellcode ansehen, erhält er das Standardgebietsschema.

public SimpleDateFormat(String pattern) { 
    this(pattern, Locale.getDefault()); 
} 

Das Hinzufügen in Ihrem Code ist redundant und unnötig ausführlich. Locale.getDefault() ist fast immer das, was Sie wollen, da das das Gerät des Benutzers eingestellt ist. Wenn Sie aus irgendeinem Grund immer zurückkehren müssen, z. B. "Montag", unabhängig von der Sprache des Benutzers, können Sie Locale.US angeben, aber das scheint eine seltene Situation zu sein.

Das beste, was zu tun ist, deaktivieren Sie die dumme Inspektion.