En JAVA, ¿cómo calcula la diferencia horaria entre dos fechas en formato de cadena donde ambas horas están en diferentes formatos y zonas horarias?

Tengo dos cadenas que contienen fechas en diferentes formatos.

Por ejemplo

String Date1 = "Fri, 25 Jan 2019 11:34:11 GMT";
String Date2 = "Thu, 24 Jan 2019 17:14:21 EST";

En JAVA, ¿cómo calculo la diferencia horaria entre ellos dado que ambos tienen una zona horaria diferente (como GMT y EST) arriba?

También, tenga en cuenta que Date1 y Date2 pueden estar en cualquiera de los formatos a continuación:

private static final String[] formats = {
            "EEE, d MMM yyyy HH:mm:ss Z", "EEEE, MMMM d, yyyy, HH:mm Z",
            "EEE, d MMM yyyy HH:mm:ss z",
            "yyyy-MM-dd'T'HH:mm:ss'Z'",   "yyyy-MM-dd'T'HH:mm:ssZ",
            "yyyy-MM-dd'T'HH:mm:ss",      "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
            "yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd HH:mm:ss",
            "MM/dd/yyyy HH:mm:ss",        "MM/dd/yyyy'T'HH:mm:ss.SSS'Z'",
            "MM/dd/yyyy'T'HH:mm:ss.SSSZ", "MM/dd/yyyy'T'HH:mm:ss.SSS",
            "MM/dd/yyyy'T'HH:mm:ssZ",     "MM/dd/yyyy'T'HH:mm:ss",
            "yyyy:MM:dd HH:mm:ss",        "yyyyMMdd", };

Respuestas a la pregunta(1)

Su respuesta a la pregunta