Commit e175bf9e by Pavel Stambrecht Committed by Oliver Woodman

Iso8601Parser improved to be able to parse timestamp offsets from UTC

parent d3fd2d1b
...@@ -934,19 +934,39 @@ public final class DashMediaSource implements MediaSource { ...@@ -934,19 +934,39 @@ public final class DashMediaSource implements MediaSource {
private static final class Iso8601Parser implements ParsingLoadable.Parser<Long> { private static final class Iso8601Parser implements ParsingLoadable.Parser<Long> {
private static final String ISO_8601_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
private static final String ISO_8601_FORMAT_2 = "yyyy-MM-dd'T'HH:mm:ssZ";
private static final String ISO_8601_FORMAT_3 = "yyyy-MM-dd'T'HH:mm:ssZ";
private static final String ISO_8601_FORMAT_2_REGEX_PATTERN = ".*[+\\-]\\d{2}:\\d{2}$";
private static final String ISO_8601_FORMAT_3_REGEX_PATTERN = ".*[+\\-]\\d{4}$";
@Override @Override
public Long parse(Uri uri, InputStream inputStream) throws IOException { public Long parse(Uri uri, InputStream inputStream) throws IOException {
String firstLine = new BufferedReader(new InputStreamReader(inputStream)).readLine(); String firstLine = new BufferedReader(new InputStreamReader(inputStream)).readLine();
try {
// TODO: It may be necessary to handle timestamp offsets from UTC. if (firstLine != null) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US); //determine format pattern
format.setTimeZone(TimeZone.getTimeZone("UTC")); String formatPattern;
return format.parse(firstLine).getTime(); if (firstLine.matches(ISO_8601_FORMAT_2_REGEX_PATTERN)) {
} catch (ParseException e) { formatPattern = ISO_8601_FORMAT_2;
throw new ParserException(e); } else if (firstLine.matches(ISO_8601_FORMAT_3_REGEX_PATTERN)) {
formatPattern = ISO_8601_FORMAT_3;
} else {
formatPattern = ISO_8601_FORMAT;
}
//parse
try {
SimpleDateFormat format = new SimpleDateFormat(formatPattern, Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));
return format.parse(firstLine).getTime();
} catch (ParseException e) {
throw new ParserException(e);
}
} else {
throw new ParserException("Unable to parse ISO 8601. Input value is null");
} }
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment