Is 2021-07-27T09:58:51.000+0000
a right ISO 8601 format? Could not locate an online validator which claims to say if this is compliant or not.
Had issues while parsing this date below are the ways tried and the result is below:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DateTimeException;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.temporal.TemporalAccessor;
import java.util.Date;
public class DateParser {
public static void main(String[] args) {
String s = "2021-07-27T09:58:51.000+0000";
try {
System.out.println("Success 001: " + OffsetDateTime.parse(s));
} catch (DateTimeParseException e) {
System.err.println("Fail: OffsetDateTime.parse: " + e.getMessage());
}
try {
DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
System.out.println("Success 002: " + df1.parse(s));
} catch (ParseException e) {
System.err.println("Fail: SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss.SSSZ: " + e.getMessage());
}
try {
DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
System.out.println("Success 003: " + df1.parse(s));
} catch (ParseException e) {
System.err.println("Fail: SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss.SSSXXX\"): " + e.getMessage());
}
try {
TemporalAccessor ta = DateTimeFormatter.ISO_INSTANT.parse(s);
Instant i = Instant.from(ta);
System.out.println("Success 004: " + Date.from(i));
} catch (DateTimeException e) {
System.err.println("Fail: TemporalAccessor: " + e.getMessage());
}
try {
System.out.println("Success 005: " + javax.xml.bind.DatatypeConverter.parseDateTime(s));
} catch (IllegalArgumentException e) {
System.err.println("Fail: javax.xml.bind.DatatypeConverter: " + e.getMessage());
}
try {
System.out.println("Success 006: " + org.apache.commons.lang3.time.DateUtils.parseDate(s,
"yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"));
} catch (ParseException e) {
System.err.println("Fail: org.apache.commons.lang3.time.DateUtils: " + e.getMessage());
}
try {
System.out.println("Success 007: " + new org.joda.time.DateTime(s).toDate());
} catch (IllegalArgumentException e) {
System.err.println("Fail: org.joda.time.DateTime: " + e.getMessage());
}
}
}
Result
Fail: OffsetDateTime.parse: Text '2021-07-27T09:58:51.000+0000' could not be parsed at index 23
Success 002: Tue Jul 27 15:28:51 IST 2021
Fail: SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"): Unparseable date: "2021-07-27T09:58:51.000+0000"
Fail: TemporalAccessor: Text '2021-07-27T09:58:51.000+0000' could not be parsed at index 23
Fail: javax.xml.bind.DatatypeConverter: 2021-07-27T09:58:51.000+0000
Success 006: Tue Jul 27 15:28:51 IST 2021
Success 007: Tue Jul 27 15:28:51 IST 2021
From the above result, could you suggest a recommended way of parsing the above kind of date and any other ISO date string?