private static bool ParseTimeZoneOffset(ref __DTString str, int len, ref TimeSpan result)
{
bool flag = true;
int num = 0;
int hours;
switch (len)
{
case 1:
case 2:
{
if (!DateTimeParse.ParseSign(ref str, ref flag))
{
return false;
}
if (!DateTimeParse.ParseDigits(ref str, len, out hours))
{
return false;
}
break;
}
default:
{
if (!DateTimeParse.ParseSign(ref str, ref flag))
{
return false;
}
if (!DateTimeParse.ParseDigits(ref str, 1, out hours))
{
return false;
}
if (str.Match(":"))
{
if (!DateTimeParse.ParseDigits(ref str, 2, out num))
{
return false;
}
}
else
{
str.Index--;
if (!DateTimeParse.ParseDigits(ref str, 2, out num))
{
return false;
}
}
break;
}
}
if (num < 0 || num >= 60)
{
return false;
}
result = new TimeSpan(hours, num, 0);
if (!flag)
{
result = result.Negate();
}
return true;
}