tl; dr
LocalDate.parse(
"01-23-2017" ,
DateTimeFormatter.ofPattern( "MM-dd-uuuu" )
)
Einzelheiten
Ich habe ein java.util.Date im Format JJJJ-MM-TT
Wie bereits erwähnt, hat die Date
Klasse kein Format. Es hat eine Anzahl von Millisekunden seit Anfang 1970 in UTC. Ohne weitere Bedingungen.
java.time
Die anderen Antworten verwenden problematische alte alte Datums- und Uhrzeitklassen, die jetzt durch die Klassen java.time ersetzt werden.
Wenn Sie eine haben java.util.Date
, konvertieren Sie in ein Instant
Objekt. Die Instant
Klasse repräsentiert einen Moment auf der Zeitachse in UTC mit einer Auflösung von Nanosekunden (bis zu neun (9) Stellen eines Dezimalbruchs).
Instant instant = myUtilDate.toInstant();
Zeitzone
Die anderen Antworten ignorieren das entscheidende Problem der Zeitzone. Das Bestimmen eines Datums erfordert eine Zeitzone. Für jeden Moment variiert das Datum weltweit je nach Zone. Ein paar Minuten nach Mitternacht in Paris ist Frankreich ein neuer Tag, während es in Montréal Québec noch „gestern“ ist.
Definieren Sie die Zeitzone, nach der Sie den Kontext für Ihre möchten Instant
.
ZoneId z = ZoneId.of( "America/Montreal" );
Wenden Sie die ZoneId
an, um eine zu erhalten ZonedDateTime
.
ZonedDateTime zdt = instant.atZone( z );
LocalDate
Wenn Sie sich nur für das Datum ohne Tageszeit interessieren, extrahieren Sie a LocalDate
.
LocalDate localDate = zdt.toLocalDate();
Rufen Sie einfach auf, um eine Zeichenfolge im Standardformat ISO 8601, JJJJ-MM-TT, zu generieren toString
. Die java.time-Klassen verwenden standardmäßig die Standardformate, wenn Zeichenfolgen generiert / analysiert werden.
String output = localDate.toString();
2017-01-23
Wenn Sie ein MM-TT-JJJJ-Format wünschen, definieren Sie ein Formatierungsmuster.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM-dd-uuuu" );
String output = localDate.format( f );
Beachten Sie, dass bei den Formatierungsmustercodes zwischen Groß- und Kleinschreibung unterschieden wird. Der Code in der Frage wurde falsch verwendet mm
(Minute der Stunde) und nicht MM
(Monat des Jahres).
Verwenden Sie DateTimeFormatter
zum Parsen dasselbe Objekt. Die java.time-Klassen sind threadsicher, sodass Sie dieses Objekt behalten und es auch über Threads hinweg wiederholt wiederverwenden können.
LocalDate localDate = LocalDate.parse( "01-23-2017" , f );
Über java.time
Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie java.util.Date
, Calendar
, & SimpleDateFormat
.
Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
Woher bekomme ich die java.time-Klassen?
- Java SE 8 und SE 9 und höher
- Eingebaut.
- Teil der Standard-Java-API mit einer gebündelten Implementierung.
- Java 9 fügt einige kleinere Funktionen und Korrekturen hinzu.
- Java SE 6 und SE 7
- Android
Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time. Sie können einige nützliche Klassen hier wie finden Interval
, YearWeek
, YearQuarter
, und mehr .