public static long parseUnknownString(final String date) {
        if (date == null) {
            throw new IllegalArgumentException("Unable to parse null date");
        }

        if (!looksLikeISODate(date)) {
            return parseDateAsMillisSinceEpoch(date);
        } else {
            try {
                return parseNormalDateTimeString(date);
            } catch (final RuntimeException e) {
                // If we were unable to parse the value as an ISO8601 date then try
                // and get it as a long.
                return parseDateAsMillisSinceEpoch(date);
            }
        }
    }
Parse a 'normal' type date in ISO 8601 format with a zone offset and a variable and optional
number of fractional second digits (0-9).
<p>
For example:
<pre>{@code
"2010-01-01T23:59:59Z" // No millis
"2010-01-01T23:59:59.123Z" // Millis
"2010-01-01T23:59:59.123456Z" // Nanos
"2010-01-01T23:59:59.123+00:00" // Zulu/UTC
"2010-01-01T23:59:59.123+02" // +2hr zone offset
"2010-01-01T23:59:59+02:00" // +2hr zone offset
"2010-01-01T23:59:59+02:30" // +2hr30min zone offset
"2010-01-01T23:59:59.123-03:00" // -3hr zone offset
}</pre>

@param date string date
@return A UTC {@link Instant}
@throws IllegalArgumentException if date does not parse
stroom-util/src/main/java/stroom/util/date/DateUtil.java