2016-04-19 4 views
1

Hier für Locale Klassen mein Code-Snippet ist für Datumsformatierung verwendet:Locale - zwei Argument in Aktion konstruieren

List<Locale> locales = new ArrayList<>(8); 
locales.add(new Locale("en")); 
locales.add(new Locale("pl")); 
locales.add(new Locale("en", "PL")); 
locales.add(new Locale("en", "CH")); 
locales.add(new Locale("en", "BR")); 
locales.add(new Locale("pl", "JP")); 
locales.add(new Locale("pl", "GER")); 
locales.add(new Locale("pl", "DK")); 
DateFormat dateInstance; 
for (Locale locale : locales) { 
    dateInstance = DateFormat.getDateInstance(DateFormat.FULL, locale); 
    System.out.println(dateInstance.format(date)); 
} 

ich folgende Ausgabe wurde:

Tuesday, April 19, 2016 
wtorek, 19 kwietnia 2016 
Tuesday, April 19, 2016 
Tuesday, April 19, 2016 
Tuesday, April 19, 2016 
wtorek, 19 kwietnia 2016 
wtorek, 19 kwietnia 2016 
wtorek, 19 kwietnia 2016 

ich nicht, was für den Konstruktor verstehen zweites Argument steht für. Erwähnte formatierte Daten hängen nicht davon ab, ob ich das Argument "Country" an den Konstruktor übergeben habe oder nicht.

... so meine Frage ist:

Gibt es richtige usecases für zweiargumentigen Locale Konstruktor?

+0

Wenn Sie Java 7+ verwenden, sollten Sie stattdessen einen 'Locale.Builder' verwenden. – fge

+0

Warum? Es scheint wie extra redundante Syntax. – null

+1

Aber ein Builder wird in allen Fällen eine korrekte 'Locale' -Instanz liefern und zu einem frühen Zeitpunkt an ungültigen Locales fehlschlagen ... – fge

Antwort

1

Ja, es gibt einige Fälle. Gebietsschema wird nicht nur von DateFormat verwendet, Sie können es auch beim Formatieren von Währungen verwenden.

double amount =200.0; 
Locale locale = new Locale("es", "ES");  
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(locale); 
System.out.println(currencyFormatter.format(amount)); 

locale = new Locale("es", "cu");  
currencyFormatter = NumberFormat.getCurrencyInstance(locale); 
System.out.println(currencyFormatter.format(amount)); 

In diesem Beispiel sind die Ländereinstellungen für Spanien und für Kuba definiert und 200,00 wird formatiert.

$ java HelloWorld 
200,00 € 
CU$200,00 

Wie Sie das Währungssymbol und die Position des Währungssymbols geändert wird sehen können.

+1

Gute Antwort auf meine fett geschriebene Frage. Danke :) – null

+0

du bist willkommen :) – phylib

3

Sie haben zufällig Länder ausgewählt, die alle dasselbe Format haben. Das ist jedoch nicht immer der Fall. Hier ist ein anderes Beispiel:

import java.util.*; 
import java.text.*; 

class Test {  
    public static void main(String[] args) { 
     List<Locale> locales = new ArrayList<>(8); 
     locales.add(new Locale("en")); 
     locales.add(new Locale("en", "GB")); 
     locales.add(new Locale("en", "US")); 
     Date date = new Date(); 
     for (Locale locale : locales) { 
      DateFormat dateInstance = DateFormat.getDateInstance(DateFormat.FULL, locale); 
      System.out.println(dateInstance.format(date)); 
     } 
    } 
} 

Ausgang:

Tuesday, April 19, 2016 
Tuesday, 19 April 2016 
Tuesday, April 19, 2016 

Beachten Sie, wie die zweite Zeile in dem dritten unterscheidet. Das zeigt im Grunde, dass das UK-Englisch-Datumsformat sich vom US-Englisch-Datumsformat unterscheidet.

Ich entdeckte auch, dass die Länder, die Sie in vergangen sind nicht diejenigen, die mit der Sprache traditionell verbunden sind, die Sie angegeben haben - es gibt keine „Polish English“ oder „Swiss Englisch“ ist, während es auf jeden Fall ist ein „UK Englisch "vs" US-Englisch "(und ebenso kanadisches Englisch, australisches Englisch usw.).

Wenn Sie ein Land passieren, in dem die angegebene Sprache zu den Hauptsprachen gehört, die in diesem Land gesprochen werden, erhalten Sie wahrscheinlich länderspezifische Ergebnisse.