int endPos = new ZoneOffsetPrinterParser("", true, true).parse(newContext, parseText, startPos);
if (endPos < 0) {
context.setParsed(TimeZone.rule(), TimeZone.UTC);
return startPos;
}
TimeZone zone = TimeZone.of((ZoneOffset) newContext.getParsed(ZoneOffset.rule()));
context.setParsed(TimeZone.rule(), zone);
return endPos;
}
// parse
String parsedZoneId = null;
int count = 0;
while (tree != null) {
int nodeLength = tree.length;
if (position + nodeLength > length) {
break;
}
parsedZoneId = parseText.substring(position, position + nodeLength);
tree = tree.get(parsedZoneId);
++count;
}
if (parsedZoneId != null && preparedIDs.contains(parsedZoneId)) {
TimeZone zone = TimeZone.of(parsedZoneId);
context.setParsed(TimeZone.rule(), zone);
return position + parsedZoneId.length();
} else {
return ~position;
}