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?
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);
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
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.
DateFormatter
can parse a String to a Joda DateTime
.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)
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.
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