Jak przekonwertować ciąg daty NA obiekt daty lub kalendarza?

Mam String reprezentację daty, z której muszę utworzyć obiekt Date lub Calendar. Przejrzałem Date i Calendar API, ale nie znalazłem nic, co mogłoby to zrobić, poza stworzeniem własnej brzydkiej metody parsowania. Wiem, że musi być jakiś sposób, czy ktoś zna jakieś rozwiązanie?

Author: BalusC, 2008-09-04

5 answers

W skrócie:

DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
try {
  Date date = formatter.parse("01/29/02");
} catch (ParseException e) {
  e.printStackTrace();
}

Zobacz SimpleDateFormat javadoc więcej.

I aby przekształcić go w Calendar, wykonaj:

Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
 123
Author: Matt Sheppard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-04 07:51:54

Tl;dr

LocalDate.parse( "2015-01-02" )

Java.CZAS

Java 8 i Później ma nową Javę.CZAS ramy, które sprawiają, że te inne odpowiedzi są przestarzałe. Ten framework jest inspirowany Joda-Time, zdefiniowany przez JSR 310, i rozszerzony przez threeten-Extra. Zobacz Tutorial .

Stare Pakiety klas, java.util.Data/Kalendarze, są notorycznie kłopotliwe i mylące. Unikaj ich.

LocalDate

Jak Joda-Czas, java.czas ma klasę LocalDate reprezentowanie wartości tylko daty Bez Czasu dnia i bez strefy czasowej.

ISO 8601

Jeśli twój łańcuch wejściowy jest w standardowym formacie ISO 8601 yyyy-MM-dd, możesz poprosić tę klasę, aby bezpośrednio przetworzyła łańcuch bez potrzeby określania formatera.

Formaty ISO 8601 są domyślnie używane w Javie.time, zarówno do parsowania, jak i generowania ciągów znaków date-time wartości.

LocalDate localDate = LocalDate.parse( "2015-01-02" );

Formatowanie

Jeśli masz inny format, Określ program formatujący z java.czas.format pakiet. Możesz określić własny wzorzec formatowania lub pozwolić Javie.czas automatycznie lokalizuje się odpowiednio do Locale określającego ludzki język do tłumaczenia i norm kulturowych do decydowania o kwestiach, takich jak kropka czy przecinek.

Wzór formatowania

Przeczytaj DateTimeFormatter klasy doc. szczegółowe informacje na temat kodów stosowanych w wzór formatu. Różnią się one nieco od starych przestarzałych wzorców klas java.text.SimpleDateFormat.

Zwróć uwagę, że drugi argument metody parse jest referencją metody , składnią dodaną do Java 8 i późniejszych.

String input = "January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "MMMM d, yyyy" , Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter );

Zrzut do konsoli.

System.out.println ( "localDate: " + localDate );

LocalDate: 2015-01-02

Lokalizuj automatycznie

Lub zamiast określać wzorzec formatowania, niech java.czas zlokalizować dla Ciebie. Wywołanie DateTimeFormatter.ofLocalizedDate i należy podać żądany / oczekiwany Locale zamiast polegać na bieżącym domyślnym JVM, który może się zmienić w dowolnym momencie podczas wykonywania (!).

String input = "January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG );
formatter = formatter.withLocale ( Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter );

Zrzut do konsoli.

System.out.println ( "input: " + input + " | localDate: " + localDate );
[[19]} wejście: 2 stycznia 2015 | localDate: 2015-01-02
 14
Author: Basil Bourque,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-10 04:53:41

The highly regarded Joda Time library warto też zajrzeć. Jest to podstawa dla nowego API date and time, który jest napisany ołówkiem dla Java 7. Projekt jest schludny, intuicyjny, dobrze udokumentowany i unika wielu niezdarności oryginału java.util.Date / java.util.Calendar klasy.

Joda ' s DateFormatter can parse a String to a Joda DateTime.
 9
Author: serg10,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-04 16:09:50

Spróbuj tego:

DateFormat.parse(String)
 0
Author: Apocalisp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-14 22:57:19

Klasa DateFormat mA metodę parse.

Zobacz http://java.sun.com/j2se/1.4.2/docs/api/java/text/DateFormat.html aby uzyskać więcej informacji.

 0
Author: Alexander Stolz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-14 22:58:08