2016-07-14 9 views
0

Wenn ich ein Datum in eine Zeichenfolge in Java umwandeln und gilt folgendes Muster:Wie kann ich das regionale Datumsformat angeben?

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 

Ausgabe: 2016-07-14

Aber ich will wie folgt sein.

Japan, Korea user : 2016-07-14 
USA, Canada user : 07-14-2016 
Germany, Australia user : 14-07-2016 

Ich kann Muster "wenn ~ else", auf der Suche nach einem allgemeineren Weg. Wie kann ich das?

Antwort

0

versuchen, diese von [http://www.java2s.com/Tutorial/Java/0040__Data-Type/FourdifferentdateformatsforfourcountriesUSUKGERMANYFRANCE.htm]

import static java.util.Locale.*; 

import java.text.DateFormat; 
import java.util.Date; 
import java.util.Locale; 

    public class MainClass { 
     public static void main(String[] args) { 
     Date today = new Date(); 
     Locale[] locales = { US, UK, GERMANY, FRANCE,JAPAN }; 
     int[] styles = { FULL, LONG, MEDIUM, SHORT }; 
     String[] styleNames = { "FULL", "LONG", "MEDIUM", "SHORT" }; 
     DateFormat fmt = null; 
     for (Locale locale : locales) { 
      System.out.println("\nThe Date for " + locale.getDisplayCountry() + ":"); 
      for (int i = 0; i < styles.length; i++) { 
      fmt = DateFormat.getDateInstance(styles[i], locale); 
      System.out.println("\tIn " + styleNames[i] + " is " + fmt.format(today)); 
      } 
     } 
     } 
    } 
0

Sie müssen 3 SimpleDateFormat:

public static void main(String[] args) { 
    // Japan, Korea user : 2016-07-14 
    SimpleDateFormat korea = new SimpleDateFormat("yyyy-MM-dd"); 
    // USA, Canada user : 07-14-2016 
    SimpleDateFormat usa = new SimpleDateFormat("MM-dd-yyyy"); 
    // Germany, Australia user : 14-07-2016 
    SimpleDateFormat europe = new SimpleDateFormat("dd-MM-yyyy"); 

    System.out.println("Japan, Korea user : " + korea.format(new Date())); 
    System.out.println("USA, Canada user : " + usa.format(new Date())); 
    System.out.println("Germany, Australia user : " + europe.format(new Date())); 
} 

OUTPUT:

Japan, Korea user : 2016-07-14 
USA, Canada user : 07-14-2016 
Germany, Australia user : 14-07-2016 
1

Sie verwenden Locale wollen können

Locale locale = Locale.KOREA; // select any locale you want 
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale); 
String formattedDate = df.format(yourDate); 

System.out.println(formattedDate); 
1

tl; dr

String output = LocalDate.now(ZoneId.of("America/Montreal")).format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).withLocale(Locale.CANADA_FRENCH)); 

Einzelheiten

Die Frage und andere Antworten werden mit alten veralteten Klassen (Simple, Datum, Kalender, etc.).

Verwenden Sie stattdessen das in Java 8 und höher integrierte java.time Framework. Siehe Oracle Tutorial. Ein großer Teil der java.time-Funktionalität wird auf Java 6 & 7 in ThreeTen-Backport zurückportiert und in ThreeTenABP an Android angepasst. Die Klasse LocalDate repräsentiert einen Nur-Datum-Wert ohne Uhrzeit und ohne Zeitzone.

Um das aktuelle Datum zu erhalten, benötigen Sie eine Zeitzone. Für jeden Moment das Datum rund um den Globus nach Zeitzone.

ZoneId zoneId = ZoneId.of("America/Montreal"); 
LocalDate today = LocalDate.now(zoneId); 

Norm ISO 8601-Format YYYY-MM-DD zu erhalten, rufen toString.

String output = today.toString(); 

Um localize the format and content der String erzeugt wird, um den Datumswert darzustellen, verwenden Sie einen DateTimeFormatter mit einem FormatStyle die Länge (Full, Lang, Mittellang, Kurz) zu bestimmen.

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT); 

Weisen Sie eine bestimmte Locale anstatt Ihre aktuelle Standard-JVM.

Locale locale = Locale.CANADA_FRENCH; 
formatter = formatter.withLocale(locale); 
String output = today.format(formatter); 

Das ist es, ziemlich einfach. Definieren Sie einfach einen Locale wie benötigt, wie Locale.CANADA, Locale.CANADA_FRENCH, Locale.GERMANY, Locale.KOREA, oder verwenden Sie die verschiedenen Konstruktoren, wo Sie die menschliche Sprache und optional das Land und die Variante übergeben.