in src/Elastic.Apm/Libraries/Newtonsoft.Json/Utilities/DateTimeParser.cs [105:157]
private bool ParseDate(int start) => Parse4Digit(start, out Year)
&& 1 <= Year
&& ParseChar(start + Lzyyyy, '-')
&& Parse2Digit(start + Lzyyyy_, out Month)
&& 1 <= Month
&& Month <= 12
&& ParseChar(start + Lzyyyy_MM, '-')
&& Parse2Digit(start + Lzyyyy_MM_, out Day)
&& 1 <= Day
&& Day <= DateTime.DaysInMonth(Year, Month);
private bool ParseTimeAndZoneAndWhitespace(int start) => ParseTime(ref start) && ParseZone(start);
private bool ParseTime(ref int start)
{
if (!(Parse2Digit(start, out Hour)
&& Hour <= 24
&& ParseChar(start + LzHH, ':')
&& Parse2Digit(start + LzHH_, out Minute)
&& Minute < 60
&& ParseChar(start + LzHH_mm, ':')
&& Parse2Digit(start + LzHH_mm_, out Second)
&& Second < 60
&& (Hour != 24 || Minute == 0 && Second == 0))) // hour can be 24 if minute/second is zero)
return false;
start += LzHH_mm_ss;
if (ParseChar(start, '.'))
{
Fraction = 0;
var numberOfDigits = 0;
while (++start < _end && numberOfDigits < MaxFractionDigits)
{
var digit = _text[start] - '0';
if (digit < 0 || digit > 9) break;
Fraction = Fraction * 10 + digit;
numberOfDigits++;
}
if (numberOfDigits < MaxFractionDigits)
{
if (numberOfDigits == 0) return false;
Fraction *= Power10[MaxFractionDigits - numberOfDigits];
}
if (Hour == 24 && Fraction != 0) return false;
}
return true;
}