Come convertire una stringa di data in un oggetto Data o Calendario?
Domanda
Ho un String
rappresentazione di una data di cui ho bisogno per creare un file Date
O Calendar
oggetto da.Ho dato un'occhiata Date
E Calendar
API ma non ho trovato nulla che possa farlo oltre a creare il mio brutto metodo di analisi.So che ci deve essere un modo, qualcuno conosce una soluzione?
Soluzione
In breve:
DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
try {
Date date = formatter.parse("01/29/02");
} catch (ParseException e) {
e.printStackTrace();
}
Vedere SimpleDateFormat
javadoc per più.
E per trasformarlo in a Calendar
, Fare:
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Altri suggerimenti
tl; dott
LocalDate.parse( "2015-01-02" )
java.time
Java 8 e versioni successive hanno una nuova versione java.time quadro che rende queste altre risposte antiquate.Questo quadro è ispirato a Joda-Time, definito da JSR310, e prorogato dal Tredieci-Extra progetto.Vedi il Esercitazione.
Le vecchie classi in bundle, java.util.Date/.Calendar, sono notoriamente problematiche e confuse.Evitateli.
LocalDate
Come Joda-Time, java.time ha una classe LocalDate
per rappresentare un valore di sola data senza ora del giorno e senza fuso orario.
ISO8601
Se la stringa di input è nello standard ISO8601 formato di yyyy-MM-dd
, puoi chiedere a quella classe di analizzare direttamente la stringa senza bisogno di specificare un formattatore.
I formati ISO 8601 vengono utilizzati per impostazione predefinita in java.time, sia per l'analisi che per la generazione di rappresentazioni di stringhe di valori di data e ora.
LocalDate localDate = LocalDate.parse( "2015-01-02" );
Formattatore
Se hai un formato diverso, specifica un formattatore dal file java.time.format pacchetto.È possibile specificare il proprio modello di formattazione o lasciare che java.time venga localizzato automaticamente in modo appropriato a a Locale
specificando una lingua umana per la traduzione e norme culturali per decidere questioni come il punto rispetto alla virgola.
Modello di formattazione
Leggi il DateTimeFormatter
class doc per i dettagli sui codici utilizzati nel modello di formato.Variano un po' dal vecchio antiquato java.text.SimpleDateFormat
modelli di classe.
Nota come il secondo argomento di parse
il metodo è a riferimento al metodo, sintassi aggiunta a Java 8 e versioni successive.
String input = "January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "MMMM d, yyyy" , Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter );
Scarica sulla console.
System.out.println ( "localDate: " + localDate );
datalocale:2015-01-02
Localizza automaticamente
Oppure, invece di specificare un modello di formattazione, lascia che java.time lo localizzi per te.Chiamata DateTimeFormatter.ofLocalizedDate
, e assicurati di specificare quanto desiderato/previsto Locale
piuttosto che fare affidamento sull'impostazione predefinita corrente della JVM che può cambiare in qualsiasi momento durante il runtime (!).
String input = "January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG );
formatter = formatter.withLocale ( Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter );
Scarica sulla console.
System.out.println ( "input: " + input + " | localDate: " + localDate );
ingresso:2 gennaio 2015 | LocalDate:2015-01-02
IL molto apprezzato Biblioteca del tempo di Joda vale anche la pena dare un'occhiata.Questa è la base per il nuovo data e ora API che è previsto per Java 7.Il design è pulito, intuitivo, Ben documentato ed evita gran parte della goffaggine dell'originale java.util.Date
/ java.util.Calendar
classi.
Quello di Joda DateFormatter
può analizzare una stringa in un Joda DateTime
.
Prova questo:
DateFormat.parse(String)
IL DateFormat
la classe ha a parse
metodo.
Vedere http://java.sun.com/j2se/1.4.2/docs/api/java/text/DateFormat.html per maggiori informazioni.