Udzielam nowoczesnej odpowiedzi.
java.time i ThreeTenABP
Aby uzyskać aktualną datę:
LocalDate today = LocalDate.now(ZoneId.of("America/Hermosillo"));
Daje ci to LocalDate
obiekt, którego powinieneś używać do przechowywania daty w programie. A LocalDate
to data bez godziny.
Tylko wtedy, gdy musisz wyświetlić datę użytkownikowi, sformatuj ją w ciągu odpowiednim dla ustawień regionalnych użytkownika:
DateTimeFormatter userFormatter
= DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
System.out.println(today.format(userFormatter));
Kiedy uruchomiłem dzisiaj ten fragment kodu w ustawieniach regionalnych w języku angielskim (USA), wynik był następujący:
13 lipca 2019 r
Jeśli chcesz, żeby był krótszy, określ FormatStyle.MEDIUM
lub nawet FormatStyle.SHORT
. DateTimeFormatter.ofLocalizedDate
używa domyślnych ustawień regionalnych formatowania, więc chodzi o to, że da wynik odpowiedni dla tego ustawienia narodowego, różny dla różnych ustawień regionalnych.
Jeśli użytkownik ma bardzo specjalne wymagania dotyczące formatu wyjściowego, użyj łańcucha wzorca formatu:
DateTimeFormatter userFormatter = DateTimeFormatter.ofPattern(
"d-MMM-u", Locale.forLanguageTag("ar-AE"));
13-يول -2019
Używam i polecam java.time, nowoczesny API daty i czasu Java. DateFormat
, SimpleDateFormat
, Date
I Calendar
używane w pytaniu i / lub wiele innych odpowiedzi, są źle zaprojektowane i dawno nieaktualne. Praca z java.time jest o wiele przyjemniejsza.
Pytanie: Czy mogę używać java.time na Androidzie?
Tak, java.time działa dobrze na starszych i nowszych urządzeniach z Androidem. Wymaga tylko co najmniej Javy 6 .
- W Javie 8 i nowszych wersjach oraz na nowszych urządzeniach z Androidem (od poziomu API 26) wbudowane jest nowoczesne API.
- W Javie 6 i 7 pobierz ThreeTen Backport, zaplecze nowoczesnych klas (ThreeTen dla JSR 310; zobacz linki na dole).
- Na (starszym) systemie Android użyj wersji ThreeTen Backport na Androida. Nazywa się ThreeTenABP. I upewnij się, że importujesz klasy daty i czasu
org.threeten.bp
z podpakietami.
Spinki do mankietów
DateFormat
klasy było OK, gdy zadawano to pytanie w 2011 r., Klasa ta i jej podklasaSimpleDateFormat
zawsze były kłopotliwe i są teraz dawno nieaktualne. Nie radzę ich używać i zamiast tego zajrzeć do java.time, nowoczesnego API daty i czasu w Javie .