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);
}