Jak mogę znaleźć DateFormat
dla danego Locale
?Format daty Java dla lokalizacji
Odpowiedz
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();
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
Jest to bardzo prawdziwe - nie ma żadnej gwarancji. Ale będzie to "SimpleDateFormat" w praktyce –
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). –
Czy istnieje inny sposób (bez użycia rzutowania SimpleDateFormat) do pobrania domyślnego wzorca dla danego obiektu Locale?
Utwórz nowy wpis, jeśli chcesz zadać pytanie lub zadać pytanie w sekcji komentarzy. Są one zarezerwowane dla odpowiedzi na oryginalny post. – hfontanez
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?
- Java SE 8, Java SE 9, a później
- wbudowanej.
- Część standardowego interfejsu API języka Java z pakietem implementacji.
- Java 9 dodaje kilka drobnych funkcji i poprawek.
- Java SE 6 i Java SE 7
- Znaczna część funkcjonalności java.time jest back-przeniesiony do Java 6 & 7 w ThreeTen-Backport.
- Android
- Projekt ThreeTenABP dostosowuje ThreeTen-backportu (wymienione powyżej) Androida szczegółowo.
- Zobacz How to use ThreeTenABP….
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.
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). –