How to convert string with this format to Java 8 time and convert to long milliseconds

Olah :

I have a MapperUtility class that needs to map a string from a web service that sends a string time "Fri Nov 22 2013 12:12:13 GMT+0000 (UTC)"

Now, I am converting it to LocalDateTime with this code:

String time = "Fri Nov 22 2013 12:12:13 GMT+0000 (UTC)";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("E MMM dd yyyy HH:mm:ssZ");
dtf.withZone(ZoneId.of("UTC"));
LocalDateTime convertedDate = LocalDateTime.parse(time, dtf);

But I am having an exception starting the GMT+0000 (UTC). It works when I removed the characters beyond the GMT. After converting them to Date Time, I need to convert them to long milliseconds. Please advise. Thanks.

Alex Salauyou :

You may build such pattern using DateTimeFormatterBuilder:

static final DateTimeFormatter DF = new DateTimeFormatterBuilder()
    .append(DateTimeFormatter.ofPattern("E MMM dd yyyy HH:mm:ss"))
    .appendLiteral(" GMT")
    .appendOffset("+HHmm", "+0000")
    .optionalStart()
    .appendLiteral(" (")
    .appendZoneId()
    .appendLiteral(')')
    .optionalEnd()
    .toFormatter()
    .withLocale(Locale.US);

Then, just:

String date = "Fri Nov 22 2013 12:12:13 GMT+0000 (UTC)";
long ms = OffsetDateTime.parse(date, DF).toInstant().toEpochMilli();  // 1385122333000

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=146087&siteId=1