ISO 8601 String to Date/Time object in Android
String dtStart = "2010-10-15T09:27:37Z";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
try {
Date date = format.parse(dtStart);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
This is what you are looking for. There is existing post about this problem.
You can use Java's SimpleDateFormat parse method or use JodaTime's DateTimeFormat to create a DateTimeFormatter and parse to a DateTime object accordingly
This question was asked in 2010, and back then it was correct that either SimpleDateFormat
or Joda-Time would be the tools you should use. It’s quite a while ago now. Today use
Instant iStart = Instant.parse(dtStart);
Yes, it’s this simple. Your string is in ISO 8601 format, and the classes from java.time
, the modern Java date and time API, parse ISO 8601 without any explicit formatter. Instant
is just one of those classes.
Edit: Question: requires android API 26 - what about supporting older versions?
Yes, java.time
works nicely on older and newer Android devices. It just requires at least Java 6.
- In Java 8 and later and on newer Android devices (from API level 26) the modern API comes built-in.
- In Java 6 and 7 get the ThreeTen Backport, the backport of the new classes (ThreeTen for JSR 310; see the links at the bottom).
- On (older) Android use the Android edition of ThreeTen Backport. It’s called ThreeTenABP. And make sure you import the date and time classes from
org.threeten.bp
with subpackages.
Links
- Oracle tutorial: Date Time explaining how to use
java.time
. - Java Specification Request (JSR) 310, where
java.time
was first described. - ThreeTen Backport project, the backport of
java.time
to Java 6 and 7 (ThreeTen for JSR-310). - ThreeTenABP, Android edition of ThreeTen Backport
- Question: How to use ThreeTenABP in Android Project, with a very thorough explanation.
- Wikipedia article: ISO 8601