2009-08-27 12 views
19

Jak mogę znaleźć DateFormat dla danego Locale?Format daty Java dla lokalizacji

+0

FYI, kłopotliwe stare klasy daty i czasu, takie jak 'DateFormat' są teraz [starszeństwem] (https://pl.wikipedia.org/wiki/Legacy_system), wypierane przez [java.time] (https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html) klas. Zobacz [Tutorial by Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –

Odpowiedz

25
DateFormat.getDateInstance(int,Locale) 

Na przykład:

import static java.text.DateFormat.*; 

DateFormat f = getDateInstance(SHORT, Locale.ENGLISH); 

Następnie można użyć tego obiektu do formatu Date s:

String d = f.format(new Date()); 

Jeśli rzeczywiście chcą poznać podstawowy wzór (np yyyy-MMM-dd), a następnie, ponieważ otrzymasz obiekt z powrotem: SimpleDateFormat:

SimpleDateFormat sf = (SimpleDateFormat) f; 
String p1 = sf.toPattern(); 
String p2 = sf.toLocalizedPattern(); 
+1

Nie sądzę, że istnieje gwarancja, że ​​DateFormat.getDateInstance (...) zwróci obiekt SimpleDateFormat, więc rzutowanie wyniku na SimpleDateFormat może być niebezpieczne (może nie działać na innej implementacji Java niż implementacja Sun, lub może nawet nie pracuje nad inną wersją implementacji Sun). – Jesper

+1

Jest to bardzo prawdziwe - nie ma żadnej gwarancji. Ale będzie to "SimpleDateFormat" w praktyce –

+0

FYI, kłopotliwe stare klasy czasu i daty, takie jak 'java.text.SimpleDateFormat' są teraz [starsze] (https://en.wikipedia.org/wiki/Legacy_system), zastąpione przez klasy [java.time] (https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html). Zobacz [Tutorial by Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –

-1

Czy istnieje inny sposób (bez użycia rzutowania SimpleDateFormat) do pobrania domyślnego wzorca dla danego obiektu Locale?

Related theme.

+1

Utwórz nowy wpis, jeśli chcesz zadać pytanie lub zadać pytanie w sekcji komentarzy. Są one zarezerwowane dla odpowiedzi na oryginalny post. – hfontanez

1

tl; dr

DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL) 
       .withLocale(Locale.CANADA_FRENCH); 

java.time

Oryginalne klasy date-time są teraz Legacy i zostały wyparte przez klasy java.time.

Urządzenie DateTimeFormatter ma prosty sposób na automatyczną lokalizację przez Locale podczas generowania ciągu znaków w celu przedstawienia wartości daty i godziny. Określ FormatStyle, aby wskazać długość wyjścia (w skrócie lub nie).

DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL); 
f = f.withLocale(Locale.CANADA_FRENCH); 

Zdobądź aktualną chwilę. Zauważ, że Locale i strefa czasowa nie mają ze sobą nic wspólnego. Jedna określa prezentację, druga dostosowuje się do konkretnej wall-clock time. W związku z tym możesz mieć strefę czasową w Nowej Zelandii z japońską strefą czasową Locale lub w tym przypadku strefą czasową w Indiach z prezentacją sformułowaną dla osoby czytającej Québécois.

ZoneId z = ZoneId.of("Asia/Kolkata"); 
ZonedDateTime zdt = ZonedDateTime.now(z); 

Wygeneruj ciąg za pomocą tego lokalizującego obiektu formatującego.

String output = zdt.format(f); 

O java.time

Ramy java.time jest wbudowana w Java 8 i późniejszych. Klasy te zastępują kłopotliwe stare klasy z datami, takie jak java.util.Date, Calendar, & SimpleDateFormat.

Projekt Joda-Time, teraz w maintenance mode, zaleca migrację do klas java.time. Aby uzyskać więcej informacji, zobacz

. I wyszukaj Stack Overflow dla wielu przykładów i objaśnień. Specyfikacja to JSR 310.

Gdzie można uzyskać lekcje java.time?

Projekt ThreeTen-Extra rozciąga java.time z dodatkowych zajęć. Ten projekt jest poligonem wskazującym na możliwe przyszłe dodatki do java.time. Możesz znaleźć tutaj kilka użytecznych klas, takich jak Interval, YearWeek, YearQuarter i more.