private static TimeSpan GetTimeSpanValue()

in src/Kusto.Language/Syntax/SyntaxToken.cs [592:675]


            private static TimeSpan GetTimeSpanValue(string text)
            {
                var valueText = GetValueText(text);

#if !BRIDGE
                TimeSpan result;
                if (TimeSpan.TryParse(valueText, out result))
                {
                    return result;
                }
#endif
                switch (valueText)
                {
                    case "min":
                        return TimeSpan.MinValue;
                    case "max":
                        return TimeSpan.MaxValue;
                }

                // find number/word split
                int split = 0;
                char ch;
                while (split < valueText.Length
                    && char.IsDigit(ch = valueText[split]) || (valueText[split] == '.'))
                {
                    split++;
                }

                var numberText = valueText.Substring(0, split);
                var wordText = valueText.Substring(split);

                double number;
                if (Double.TryParse(numberText, out number))
                {
                    switch (wordText)
                    {
                        case "s":
                        case "sec":
                        case "second":
                        case "seconds":
                            return TimeSpan.FromSeconds(number);
                        case "m":
                        case "min":
                        case "minute":
                        case "minutes":
                            return TimeSpan.FromMinutes(number);
                        case "h":
                        case "hr":
                        case "hrs":
                        case "hour":
                        case "hours":
                            return TimeSpan.FromHours(number);
                        case "d":
                        case "day":
                        case "days":
                            return TimeSpan.FromDays(number);
                        case "ms":
                        case "milli":
                        case "millis":
                        case "millisec":
                        case "millisecond":
                        case "milliseconds":
                            return TimeSpan.FromMilliseconds(number);
                        case "micro":
                        case "micros":
                        case "microsec":
                        case "microsecond":
                        case "microseconds":
                            return TimeSpan.FromSeconds(number / 1_000_000.0);
                        case "nano":
                        case "nanos":
                        case "nanosec":
                        case "nanosecond":
                        case "nanoseconds":
                            return TimeSpan.FromSeconds(number / 1_000_000_000.0);
                        case "tick":
                        case "ticks":
                            return TimeSpan.FromTicks((long)number);
                    }
                }

                // bad timespan literal?
                return TimeSpan.FromSeconds(0.0);
            }