internal static bool TryParseTime(string Expression, out double Value) {
Expression = TrimInside(Expression);
if (Expression.Length != 0) {
CultureInfo Culture = CultureInfo.InvariantCulture;
int i = Expression.IndexOf('.');
if (i >= 1) {
int h; if (int.TryParse(Expression.Substring(0, i), NumberStyles.Integer, Culture, out h)) {
int n = Expression.Length - i - 1;
if (n == 1 | n == 2) {
uint m; if (uint.TryParse(Expression.Substring(i + 1, n), NumberStyles.None, Culture, out m)) {
Value = 3600.0 * (double)h + 60.0 * (double)m;
return true;
}
} else if (n >= 3) {
if (n > 4)
{
Interface.AddMessage(Interface.MessageType.Warning, false, "A maximum of 4 digits of precision are supported in TIME values");
n = 4;
}
uint m; if (uint.TryParse(Expression.Substring(i + 1, 2), NumberStyles.None, Culture, out m)) {
uint s; if (uint.TryParse(Expression.Substring(i + 3, n - 2), NumberStyles.None, Culture, out s)) {
Value = 3600.0 * (double)h + 60.0 * (double)m + (double)s;
return true;
}
}
}
}
} else if (i == -1) {
int h; if (int.TryParse(Expression, NumberStyles.Integer, Culture, out h)) {
Value = 3600.0 * (double)h;
return true;
}
}
}
Value = 0.0;
return false;
}