Cambio de comportamiento de SimpleDateFormat en Android Marshmallow

He encontrado un problema con el formato de fecha en Android 6.0, Marshmallow. El código que arroja la excepción que se indica a continuación es una biblioteca de Java puro (creada por separado) que mi aplicación utiliza para solicitudes de API ("el cliente"). La biblioteca está construida con Java 1.6 si eso está relacionado ... de todos modos, aquí está el código;

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd E hh:mm aa", Locale.UK);
Date eventDate = dateFormat.parse(StringUtils.substring(record, 0, 23).trim());

...elrecord tiene valor;

2015-10-23 Fri 10:59 PM BST   3.60 meters

... que después de "recortar" es;

2015-10-23 Fri 10:59 PM
yyyy-MM-dd E hh:mm aa

Este código ha funcionado desde los viejos tiempos de Froyo y está probado en unidades. Todo eso a un lado Marshmallow arroja la excepción;

10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException: SynchroniseTidePosition.doInBackground
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException: java.text.ParseException: Unparseable date: "2015-10-23 Fri 10:59 PM" (at offset 21)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException:     at java.text.DateFormat.parse(DateFormat.java:579)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException:     at com.oceanlife.rover.handler.XTideParser.parseResponse(XTideParser.java:69)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException:     at com.brantapps.oceanlife.task.SynchroniseTidePosition.doInBackground(SynchroniseTidePosition.java:107)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException:     at com.brantapps.oceanlife.task.SynchroniseTidePosition.doInBackground(SynchroniseTidePosition.java:43)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException:     at android.os.AsyncTask$2.call(AsyncTask.java:295)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException:     at java.lang.Thread.run(Thread.java:818)

El desplazamiento "21" es el espacio después del '9' en 10:59. ¿Alguien puede explicar este fracaso?

Actualizar

Cambió a joda-time y escupió un mensaje de error más informativo. Aquí está;

Invalid format ... is malformed at "PM"

... entonces, se trata del aspecto AM / PM de la cadena que intenta analizarse, de vuelta alos documentos

Respuestas a la pregunta(1)

Su respuesta a la pregunta