java.time
In March 2014, modern date-time API* API supplanted the error-prone java.util
date-time API and their formatting API, SimpleDateFormat
. Since then it has been highly recommended to stop using the legacy API.
Also, quoted below is a notice from the home page of Joda-Time:
Note that from Java SE 8 onwards, users are asked to migrate to java.time (JSR-310) - a core part of the JDK which replaces this project.
You do not need DateTimeFormatter
for formatting
You need DateTimeFormatter
only for parsing your string but you do not need a DateTimeFormatter
to get the date in the desired format. The modern Date-Time API is based on ISO 8601 and thus the toString
implementation of java.time
types return a string in ISO 8601 format. Your desired format is the default format of LocalDate#toString
.
Solution using java.time
, the modern Date-Time API:
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String strDate = "2011-01-18 00:00:00.0";
DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("u-M-d H:m:s.S", Locale.ENGLISH);
LocalDateTime ldt = LocalDateTime.parse(strDate, dtfInput);
// Alternatively,
// LocalDateTime ldt = dtfInput.parse(strDate, LocalDateTime::from);
LocalDate date = ldt.toLocalDate();
System.out.println(date);
}
}
Output:
2011-01-18
ONLINE DEMO
Some important notes about the solution:
java.time
made it possible to call parse
and format
functions on the Date-Time type itself, in addition to the traditional way (i.e. calling parse
and format
functions on the formatter type, which is DateTimeFormatter
in case of java.time
API).
- Here, you can use
y
instead of u
but I prefer u
to y
.
Learn more about the modern Date-Time API from Trail: Date Time.
* For any reason, if you have to stick to Java 6 or Java 7, you can use ThreeTen-Backport which backports most of the java.time functionality to Java 6 & 7. If you are working for an Android project and your Android API level is still not compliant with Java-8, check Java 8+ APIs available through desugaring and How to use ThreeTenABP in Android Project.