Wie konvertiere ich eine Datumszeichenfolge in ein Datums- oder Kalenderobjekt?
Frage
Ich habe ein String
Darstellung eines Datums, das ich erstellen muss Date
oder Calendar
Objekt aus.Ich habe durchgeschaut Date
Und Calendar
APIs, aber ich habe nichts gefunden, was dies tun kann, außer meine eigene hässliche Parse-Methode zu erstellen.Ich weiß, dass es einen Weg geben muss. Kennt jemand eine Lösung?
Lösung
In Kürze:
DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
try {
Date date = formatter.parse("01/29/02");
} catch (ParseException e) {
e.printStackTrace();
}
Sehen SimpleDateFormat
Javadoc für mehr.
Und es in ein zu verwandeln Calendar
, Tun:
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Andere Tipps
tl;dr
LocalDate.parse( "2015-01-02" )
java.time
Java 8 und höher hat eine neue java.time Rahmen, der diese anderen Antworten überholt macht.Dieses Framework ist inspiriert von Joda-Zeit, definiert von JSR 310, und erweitert um die ThreeTen-Extra Projekt.Siehe die Lernprogramm.
Die alten gebündelten Klassen java.util.Date/.Calendar sind bekanntermaßen problematisch und verwirrend.Vermeide sie.
LocalDate
Wie Joda-Time hat java.time eine Klasse LocalDate
um einen reinen Datumswert ohne Uhrzeit und Zeitzone darzustellen.
ISO 8601
Wenn Ihre Eingabezeichenfolge im Standard liegt ISO 8601 Format von yyyy-MM-dd
, können Sie diese Klasse bitten, die Zeichenfolge direkt zu analysieren, ohne dass ein Formatierer angegeben werden muss.
Die ISO 8601-Formate werden standardmäßig in java.time sowohl zum Parsen als auch zum Generieren von Zeichenfolgendarstellungen von Datums-/Uhrzeitwerten verwendet.
LocalDate localDate = LocalDate.parse( "2015-01-02" );
Formatierer
Wenn Sie ein anderes Format haben, geben Sie einen Formatierer aus dem an java.time.format Paket.Sie können entweder Ihr eigenes Formatierungsmuster angeben oder java.time automatisch entsprechend einem anpassen lassen Locale
Festlegung einer menschlichen Sprache für die Übersetzung und kultureller Normen zur Entscheidung über Fragen wie Punkt oder Komma.
Formatierungsmuster
Lies das DateTimeFormatter
Einzelheiten zu den im Formatmuster verwendeten Codes finden Sie im Klassendokument.Sie unterscheiden sich ein wenig von den alten, veralteten java.text.SimpleDateFormat
Klassenmuster.
Beachten Sie, wie das zweite Argument zum parse
Methode ist eine Methodenreferenz, Syntax zu Java 8 und höher hinzugefügt.
String input = "January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "MMMM d, yyyy" , Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter );
Auf die Konsole übertragen.
System.out.println ( "localDate: " + localDate );
lokales Datum:02.01.2015
Automatisch lokalisieren
Oder anstatt ein Formatierungsmuster anzugeben, lassen Sie java.time die Lokalisierung für Sie durchführen.Anruf DateTimeFormatter.ofLocalizedDate
, und stellen Sie sicher, dass Sie das Gewünschte/Erwartete angeben Locale
anstatt sich auf die aktuelle Standardeinstellung der JVM zu verlassen, die sich jederzeit zur Laufzeit (!) ändern kann.
String input = "January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG );
formatter = formatter.withLocale ( Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter );
Auf die Konsole übertragen.
System.out.println ( "input: " + input + " | localDate: " + localDate );
Eingang:2. Januar 2015 | LOCALDATE:02.01.2015
Der hoch angesehen Joda Time-Bibliothek ist auch einen Blick wert.Das ist die Basis für das Neue Datum und Uhrzeit API das ist für Java 7 vorgesehen.Das Design ist ordentlich, intuitiv, gut dokumentiert und vermeidet einen Großteil der Unbeholfenheit des Originals java.util.Date
/ java.util.Calendar
Klassen.
Jodas DateFormatter
kann einen String in einen Joda analysieren DateTime
.
Versuche dies:
DateFormat.parse(String)
Der DateFormat
Klasse hat eine parse
Methode.
Sehen http://java.sun.com/j2se/1.4.2/docs/api/java/text/DateFormat.html für mehr Informationen.