569 result.SetFailure(
ParseFailureKind.FormatWithParameter,
"Format_BadDateTime");
574 result.SetBadFormatSpecifierFailure();
637 result.SetFailure(
ParseFailureKind.ArgumentNull,
"ArgumentNull_String",
null,
"formats");
642 result.SetFailure(
ParseFailureKind.FormatWithParameter,
"Format_BadDateTime");
652 if (
string.IsNullOrEmpty(
text))
654 result.SetBadFormatSpecifierFailure();
659 result2.flags = result.flags;
667 result.SetBadDateTimeFailure();
673 if (target.Length >
str.Value.Length -
str.Index)
677 if (
str.CompareInfo.Compare(
str.Value.Slice(
str.Index, target.Length), target,
CompareOptions.IgnoreCase) != 0)
681 int num = str.Index + target.Length;
682 if (num <
str.Value.Length)
684 char c =
str.Value[num];
685 if (
char.IsLetter(c))
691 if (
str.Index <
str.Length)
693 str.m_current =
str.Value[
str.Index];
713 return (uint)(
ch - 48) <= 9u;
724 result += (double)(current - 48) * num;
735 if (subString.
length != 1)
739 char c = subString[0];
740 if (c !=
'+' && c !=
'-')
744 str.ConsumeSubString(subString);
745 subString =
str.GetSubString();
757 str.ConsumeSubString(subString);
758 subString =
str.GetSubString();
759 if (subString.
length == 1 && subString[0] ==
':')
761 str.ConsumeSubString(subString);
762 subString =
str.GetSubString();
767 num = subString.
value;
768 str.ConsumeSubString(subString);
775 str.ConsumeSubString(subString);
780 if (num < 0 || num >= 60)
784 result =
new TimeSpan(hours, num, 0);
787 result = result.Negate();
794 if (
str.Index <
str.Length - 1)
796 char c =
str.Value[
str.Index];
798 while (
char.IsWhiteSpace(c) &&
str.Index + num <
str.Length - 1)
801 c =
str.Value[str.Index + num];
803 if (c ==
'+' || c ==
'-')
806 if ((result.flags &
ParseFlags.TimeZoneUsed) != 0)
808 result.SetBadDateTimeFailure();
814 result.SetBadDateTimeFailure();
825 str.GetRegularToken(out var tokenType, out var tokenValue, dtfi);
826 int indexBeforeSeparator;
827 char charBeforeSeparator;
833 if (raw.numCount == 3 || tokenValue == -1)
835 result.SetBadDateTimeFailure();
838 if (dps ==
DS.T_NNt &&
str.Index <
str.Length - 1)
840 char c =
str.Value[
str.Index];
850 dtok.num = tokenValue;
852 if (tokenType ==
TokenType.YearNumberToken)
856 raw.year = tokenValue;
857 switch (separatorToken =
str.GetSeparatorToken(dtfi, out indexBeforeSeparator, out charBeforeSeparator))
860 dtok.dtt =
DTT.YearEnd;
864 if (raw.timeMark ==
TM.NotSet)
866 raw.timeMark = ((separatorToken !=
TokenType.SEP_Am) ?
TM.PM :
TM.AM);
867 dtok.dtt =
DTT.YearSpace;
871 result.SetBadDateTimeFailure();
875 dtok.dtt =
DTT.YearSpace;
878 dtok.dtt =
DTT.YearDateSep;
881 if (!raw.hasSameDateAndTimeSeparators)
883 result.SetBadDateTimeFailure();
886 dtok.dtt =
DTT.YearDateSep;
891 str.Index = indexBeforeSeparator;
892 str.m_current = charBeforeSeparator;
893 dtok.dtt =
DTT.YearSpace;
897 dtok.dtt =
DTT.YearDateSep;
903 dtok.dtt =
DTT.NumDatesuff;
904 dtok.suffix = separatorToken;
909 dtok.dtt =
DTT.NumTimesuff;
910 dtok.suffix = separatorToken;
913 result.SetBadDateTimeFailure();
918 result.SetBadDateTimeFailure();
921 switch (separatorToken =
str.GetSeparatorToken(dtfi, out indexBeforeSeparator, out charBeforeSeparator))
924 dtok.dtt =
DTT.NumEnd;
925 raw.AddNumber(dtok.num);
929 if (raw.timeMark ==
TM.NotSet)
931 raw.timeMark = ((separatorToken !=
TokenType.SEP_Am) ?
TM.PM :
TM.AM);
932 dtok.dtt =
DTT.NumAmpm;
937 raw.AddNumber(dtok.num);
945 result.SetBadDateTimeFailure();
949 dtok.dtt =
DTT.NumSpace;
950 raw.AddNumber(dtok.num);
953 dtok.dtt =
DTT.NumDatesep;
954 raw.AddNumber(dtok.num);
959 str.Index = indexBeforeSeparator;
960 str.m_current = charBeforeSeparator;
961 dtok.dtt =
DTT.NumSpace;
965 dtok.dtt =
DTT.NumDatesep;
967 raw.AddNumber(dtok.num);
970 if (raw.hasSameDateAndTimeSeparators && (dps ==
DS.D_Y || dps ==
DS.D_YN || dps ==
DS.D_YNd || dps ==
DS.D_YM || dps ==
DS.D_YMd))
972 dtok.dtt =
DTT.NumDatesep;
973 raw.AddNumber(dtok.num);
977 dtok.dtt =
DTT.NumTimesep;
978 raw.AddNumber(dtok.num);
984 dtok.num = dtfi.Calendar.ToFourDigitYear(tokenValue);
988 result.SetBadDateTimeFailure();
991 dtok.dtt =
DTT.NumDatesuff;
992 dtok.suffix = separatorToken;
996 dtok.dtt =
DTT.NumDatesuff;
997 dtok.suffix = separatorToken;
1002 dtok.dtt =
DTT.NumTimesuff;
1003 dtok.suffix = separatorToken;
1006 dtok.dtt =
DTT.NumLocalTimeMark;
1007 raw.AddNumber(dtok.num);
1010 result.SetBadDateTimeFailure();
1018 if (tokenValue >= 100)
1022 raw.year = tokenValue;
1023 TokenType tokenType2 = (separatorToken =
str.GetSeparatorToken(dtfi, out indexBeforeSeparator, out charBeforeSeparator));
1030 result.SetBadDateTimeFailure();
1033 str.Index = indexBeforeSeparator;
1034 str.m_current = charBeforeSeparator;
1035 dtok.dtt =
DTT.YearSpace;
1039 dtok.dtt =
DTT.YearSpace;
1044 dtok.dtt =
DTT.YearEnd;
1048 result.SetBadDateTimeFailure();
1051 dtok.num = tokenValue;
1052 raw.AddNumber(dtok.num);
1053 switch (separatorToken =
str.GetSeparatorToken(dtfi, out indexBeforeSeparator, out charBeforeSeparator))
1056 dtok.dtt =
DTT.NumEnd;
1060 dtok.dtt =
DTT.NumDatesep;
1065 str.Index = indexBeforeSeparator;
1066 str.m_current = charBeforeSeparator;
1067 dtok.dtt =
DTT.NumSpace;
1071 dtok.dtt =
DTT.NumDatesep;
1075 result.SetBadDateTimeFailure();
1081 if (raw.dayOfWeek == -1)
1083 raw.dayOfWeek = tokenValue;
1084 dtok.dtt =
DTT.DayOfWeek;
1087 result.SetBadDateTimeFailure();
1090 if (raw.month == -1)
1093 switch (separatorToken =
str.GetSeparatorToken(dtfi, out indexBeforeSeparator, out charBeforeSeparator))
1096 dtok.dtt =
DTT.MonthEnd;
1099 dtok.dtt =
DTT.MonthSpace;
1102 dtok.dtt =
DTT.MonthDatesep;
1105 if (!raw.hasSameDateAndTimeSeparators)
1107 result.SetBadDateTimeFailure();
1110 dtok.dtt =
DTT.MonthDatesep;
1115 str.Index = indexBeforeSeparator;
1116 str.m_current = charBeforeSeparator;
1117 dtok.dtt =
DTT.MonthSpace;
1121 dtok.dtt =
DTT.MonthDatesep;
1125 result.SetBadDateTimeFailure();
1128 raw.month = tokenValue;
1131 result.SetBadDateTimeFailure();
1134 if (result.era != -1)
1136 result.era = tokenValue;
1140 result.SetBadDateTimeFailure();
1149 if (result.era != -1)
1151 result.era = tokenValue;
1155 result.SetBadDateTimeFailure();
1164 if (result.era != -1)
1166 result.era = tokenValue;
1170 result.SetBadDateTimeFailure();
1173 if ((result.flags &
ParseFlags.TimeZoneUsed) != 0)
1175 result.SetBadDateTimeFailure();
1178 dtok.dtt =
DTT.TimeZone;
1180 result.timeZoneOffset =
new TimeSpan(0
L);
1188 if (raw.timeMark ==
TM.NotSet)
1190 raw.timeMark = (
TM)tokenValue;
1193 result.SetBadDateTimeFailure();
1196 if (
char.IsLetter(
str.m_current))
1198 result.SetFailure(
ParseFailureKind.FormatWithOriginalDateTimeAndParameter,
"Format_UnknownDateTimeWord",
str.Index);
1201 if ((
str.m_current ==
'-' ||
str.m_current ==
'+') && (result.flags &
ParseFlags.TimeZoneUsed) == 0)
1215 result.SetBadDateTimeFailure();
1223 switch (
str.Value[
str.Index])
1229 for (
int j = 0; j <
str.Length; j++)
1231 char c =
str.Value[j];
1255 if (!
char.IsWhiteSpace(c) && (!flag || flag2))
1271 for (
int i =
str.Index; i <
str.Length; i++)
1273 if (
str.Value[i] != 0)
1278 str.Index =
str.Length;
1293 for (
int i = 0; i < datePattern.Length && num4 < 3; i++)
1295 char c = datePattern[i];
1315 for (; i + 1 < datePattern.Length && datePattern[i + 1] ==
'y'; i++)
1321 for (; i + 1 < datePattern.Length && datePattern[i + 1] ==
'M'; i++)
1328 for (; i + 1 < datePattern.Length && datePattern[i + 1] ==
'd'; i++)
1340 if (num == 0 && num2 == 1 && num3 == 2)
1345 if (num2 == 0 && num3 == 1 && num == 2)
1350 if (num3 == 0 && num2 == 1 && num == 2)
1355 if (num == 0 && num3 == 1 && num2 == 2)
1370 for (
int i = 0; i < pattern.Length && num3 < 2; i++)
1372 char c = pattern[i];
1392 for (; i + 1 < pattern.Length && pattern[i + 1] ==
'y'; i++)
1398 for (; i + 1 < pattern.Length && pattern[i + 1] ==
'M'; i++)
1404 if (num == 0 && num2 == 1)
1409 if (num2 == 0 && num == 1)
1424 for (
int i = 0; i < pattern.Length && num3 < 2; i++)
1426 char c = pattern[i];
1447 for (; i + 1 < pattern.Length && pattern[i + 1] ==
'd'; i++)
1459 for (; i + 1 < pattern.Length && pattern[i + 1] ==
'M'; i++)
1465 if (num == 0 && num2 == 1)
1470 if (num2 == 0 && num == 1)
1485 year = result.calendar.ToFourDigitYear(
year);
1493 adjustedYear =
year;
1499 if (result.calendar.IsValidDay(
year, month, day, result.era))
1501 result.SetDate(
year, month, day);
1524 result.Year = result.calendar.GetYear(
GetDateTimeNow(ref result, ref styles));
1530 if ((result.flags &
ParseFlags.HaveDate) != 0)
1532 result.SetBadDateTimeFailure();
1535 int number = raw.GetNumber(0);
1536 int number2 = raw.GetNumber(1);
1545 if (
SetDateYMD(ref result, result.Year, number, number2))
1551 else if (
SetDateYMD(ref result, result.Year, number2, number))
1556 result.SetBadDateTimeFailure();
1562 if ((result.flags &
ParseFlags.HaveDate) != 0)
1564 result.SetBadDateTimeFailure();
1567 int number = raw.GetNumber(0);
1568 int number2 = raw.GetNumber(1);
1569 int number3 = raw.GetNumber(2);
1579 if (
TryAdjustYear(ref result, number, out adjustedYear) &&
SetDateYMD(ref result, adjustedYear, number2, number3))
1586 if (
TryAdjustYear(ref result, number3, out adjustedYear) &&
SetDateMDY(ref result, number, number2, adjustedYear))
1593 if (
TryAdjustYear(ref result, number3, out adjustedYear) &&
SetDateDMY(ref result, number, number2, adjustedYear))
1600 if (
TryAdjustYear(ref result, number, out adjustedYear) &&
SetDateYDM(ref result, adjustedYear, number2, number3))
1607 result.SetBadDateTimeFailure();
1613 if ((result.flags &
ParseFlags.HaveDate) != 0)
1615 result.SetBadDateTimeFailure();
1627 result.SetFailure(
ParseFailureKind.FormatWithParameter,
"Format_BadDatePattern", dtfi.YearMonthPattern);
1632 if (!
TryAdjustYear(ref result, raw.GetNumber(0), out var adjustedYear) || !
SetDateYMD(ref result, adjustedYear, raw.month, 1))
1634 result.SetBadDateTimeFailure();
1641 if (!
SetDateYMD(ref result, result.Year, raw.month, raw.GetNumber(0)))
1643 result.SetBadDateTimeFailure();
1656 result.Month = raw.month;
1657 if ((order == 7 || order == 6) && result.calendar.IsValidDay(result.Year, result.Month, raw.GetNumber(0), result.era))
1659 result.Day = raw.GetNumber(0);
1662 result.SetBadDateTimeFailure();
1668 if ((result.flags &
ParseFlags.HaveDate) != 0)
1670 result.SetBadDateTimeFailure();
1682 result.SetFailure(
ParseFailureKind.FormatWithParameter,
"Format_BadDatePattern", dtfi.YearMonthPattern);
1687 if (!
TryAdjustYear(ref result, raw.GetNumber(0), out var adjustedYear) || !
SetDateYMD(ref result, adjustedYear, raw.month, 1))
1689 result.SetBadDateTimeFailure();
1696 if (!
SetDateYMD(ref result, result.Year, raw.month, raw.GetNumber(0)))
1698 result.SetBadDateTimeFailure();
1706 if ((result.flags &
ParseFlags.HaveDate) != 0)
1708 result.SetBadDateTimeFailure();
1711 int number = raw.GetNumber(0);
1712 int number2 = raw.GetNumber(1);
1722 if (
TryAdjustYear(ref result, number2, out adjustedYear) && result.calendar.IsValidDay(adjustedYear, raw.month, number, result.era))
1724 result.SetDate(adjustedYear, raw.month, number);
1728 if (
TryAdjustYear(ref result, number, out adjustedYear) && result.calendar.IsValidDay(adjustedYear, raw.month, number2, result.era))
1730 result.SetDate(adjustedYear, raw.month, number2);
1736 if (
TryAdjustYear(ref result, number, out adjustedYear) && result.calendar.IsValidDay(adjustedYear, raw.month, number2, result.era))
1738 result.SetDate(adjustedYear, raw.month, number2);
1742 if (
TryAdjustYear(ref result, number2, out adjustedYear) && result.calendar.IsValidDay(adjustedYear, raw.month, number, result.era))
1744 result.SetDate(adjustedYear, raw.month, number);
1750 if (
TryAdjustYear(ref result, number2, out adjustedYear) && result.calendar.IsValidDay(adjustedYear, raw.month, number, result.era))
1752 result.SetDate(adjustedYear, raw.month, number);
1756 if (
TryAdjustYear(ref result, number, out adjustedYear) && result.calendar.IsValidDay(adjustedYear, raw.month, number2, result.era))
1758 result.SetDate(adjustedYear, raw.month, number2);
1764 result.SetBadDateTimeFailure();
1770 if ((result.flags &
ParseFlags.HaveDate) != 0)
1772 result.SetBadDateTimeFailure();
1775 int number = raw.GetNumber(0);
1776 int number2 = raw.GetNumber(1);
1780 if (
SetDateYMD(ref result, raw.year, number2, number))
1786 else if (
SetDateYMD(ref result, raw.year, number, number2))
1791 result.SetBadDateTimeFailure();
1797 if ((result.flags &
ParseFlags.HaveDate) != 0)
1799 result.SetBadDateTimeFailure();
1802 int number = raw.GetNumber(0);
1803 int number2 = raw.GetNumber(1);
1809 if (order == 1 || order == 0)
1811 if (
SetDateYMD(ref result, raw.year, number, number2))
1817 else if (
SetDateYMD(ref result, raw.year, number2, number))
1822 result.SetBadDateTimeFailure();
1828 if ((result.flags &
ParseFlags.HaveDate) != 0)
1830 result.SetBadDateTimeFailure();
1833 if (
SetDateYMD(ref result, raw.year, raw.month, raw.GetNumber(0)))
1838 result.SetBadDateTimeFailure();
1844 if ((result.flags &
ParseFlags.HaveDate) != 0)
1846 result.SetBadDateTimeFailure();
1849 if (
SetDateYMD(ref result, raw.year, raw.GetNumber(0), 1))
1854 result.SetBadDateTimeFailure();
1860 if ((result.flags &
ParseFlags.HaveDate) != 0)
1862 result.SetBadDateTimeFailure();
1865 if (
SetDateYMD(ref result, raw.year, raw.month, 1))
1870 result.SetBadDateTimeFailure();
1880 raw.timeMark =
TM.AM;
1884 raw.timeMark =
TM.PM;
1894 if (hour < 0 || hour > 12)
1898 hour = ((hour != 12) ? hour : 0);
1901 if (hour < 0 || hour > 23)
1918 if ((result.flags &
ParseFlags.HaveTime) != 0)
1920 result.SetBadDateTimeFailure();
1923 if (raw.timeMark ==
TM.NotSet)
1925 result.SetBadDateTimeFailure();
1928 result.Hour = raw.GetNumber(0);
1935 if ((result.flags &
ParseFlags.HaveTime) != 0)
1937 result.SetBadDateTimeFailure();
1940 result.Hour = raw.GetNumber(0);
1941 result.Minute = raw.GetNumber(1);
1948 if ((result.flags &
ParseFlags.HaveTime) != 0)
1950 result.SetBadDateTimeFailure();
1953 result.Hour = raw.GetNumber(0);
1954 result.Minute = raw.GetNumber(1);
1955 result.Second = raw.GetNumber(2);
1962 if (raw.numCount != 1 || result.Day != -1)
1964 result.SetBadDateTimeFailure();
1967 result.Day = raw.GetNumber(0);
1973 if (result.Month == -1)
1975 result.SetBadDateTimeFailure();
1978 if (result.Year != -1)
1980 result.SetBadDateTimeFailure();
1983 if (!
TryAdjustYear(ref result, raw.GetNumber(0), out result.Year))
1985 result.SetBadDateTimeFailure();
1994 if ((result.flags &
ParseFlags.HaveYear) != 0)
1996 if ((result.flags &
ParseFlags.HaveMonth) == 0 && (result.flags &
ParseFlags.HaveDay) == 0 &&
TryAdjustYear(ref result, raw.year, out result.Year) &&
SetDateYMD(ref result, result.Year, raw.GetNumber(0), raw.GetNumber(1)))
2011 if (
TryAdjustYear(ref result, raw.GetNumber(0), out adjustedYear) &&
SetDateYMD(ref result, adjustedYear, result.Month, raw.GetNumber(1)))
2016 else if (
TryAdjustYear(ref result, raw.GetNumber(1), out adjustedYear) &&
SetDateYMD(ref result, adjustedYear, result.Month, raw.GetNumber(0)))
2021 result.SetBadDateTimeFailure();
2027 switch (dtok.suffix)
2030 if ((result.flags &
ParseFlags.HaveYear) != 0)
2035 result.Year = (raw.year = dtok.num);
2038 if ((result.flags &
ParseFlags.HaveMonth) != 0)
2043 result.Month = (raw.month = dtok.num);
2046 if ((result.flags &
ParseFlags.HaveDay) != 0)
2051 result.Day = dtok.num;
2054 if ((result.flags &
ParseFlags.HaveHour) != 0)
2059 result.Hour = dtok.num;
2062 if ((result.flags &
ParseFlags.HaveMinute) != 0)
2067 result.Minute = dtok.num;
2070 if ((result.flags &
ParseFlags.HaveSecond) != 0)
2075 result.Second = dtok.num;
2086 raw.year = raw.GetNumber(1);
2087 if (!dtfi.YearMonthAdjustment(ref raw.year, ref raw.month, parsedMonthName:
true))
2089 result.SetFailure(
ParseFailureKind.FormatBadDateTimeCalendar,
"Format_BadDateTimeCalendar");
2098 if (!dtfi.YearMonthAdjustment(ref raw.year, ref raw.month, parsedMonthName:
true))
2100 result.SetFailure(
ParseFailureKind.FormatBadDateTimeCalendar,
"Format_BadDateTimeCalendar");
2109 if (raw.year < 1000)
2117 if (!dtfi.YearMonthAdjustment(ref result.Year, ref raw.month, parsedMonthName:
true))
2119 result.SetFailure(
ParseFailureKind.FormatBadDateTimeCalendar,
"Format_BadDateTimeCalendar");
2126 if (!dtfi.YearMonthAdjustment(ref result.Year, ref raw.month, parsedMonthName:
true))
2128 result.SetFailure(
ParseFailureKind.FormatBadDateTimeCalendar,
"Format_BadDateTimeCalendar");
2137 if (!dtfi.YearMonthAdjustment(ref raw.year, ref raw.month, parsedMonthName:
true))
2139 result.SetFailure(
ParseFailureKind.FormatBadDateTimeCalendar,
"Format_BadDateTimeCalendar");
2166 result.SetBadDateTimeFailure();
2182 flag =
GetDayOfNN(ref result, ref styles, ref raw, dtfi);
2188 flag =
GetDayOfMN(ref result, ref styles, ref raw, dtfi);
2191 flag =
GetDayOfNM(ref result, ref styles, ref raw, dtfi);
2251 if (
TryParse(
s, dtfi, styles, ref result))
2263 if (
TryParse(
s, dtfi, styles, ref result))
2275 if (
TryParse(
s, dtfi, styles, ref result2))
2289 if (
TryParse(
s, dtfi, styles, ref result2))
2304 result.SetFailure(
ParseFailureKind.FormatWithParameter,
"Format_BadDateTime");
2312 int* numberBuffer = stackalloc
int[3];
2313 raw.
Init(numberBuffer);
2321 if (!
Lex(dS, ref
str, ref dtok, ref raw, ref result, ref dtfi, styles))
2325 if (dtok.dtt ==
DTT.Unk)
2333 result.SetBadDateTimeFailure();
2338 if (dtok.dtt ==
DTT.NumLocalTimeMark)
2340 if (dS ==
DS.D_YNd || dS ==
DS.D_YN)
2344 result.SetBadDateTimeFailure();
2347 if (raw.hasSameDateAndTimeSeparators)
2349 if (dtok.dtt ==
DTT.YearEnd || dtok.dtt ==
DTT.YearSpace || dtok.dtt ==
DTT.YearDateSep)
2360 bool flag2 =
str.AtEnd();
2365 case DTT.YearDateSep:
2366 dtok.dtt = (flag2 ? DTT.YearEnd :
DTT.YearSpace);
2368 case DTT.NumDatesep:
2369 dtok.dtt = (flag2 ? DTT.NumEnd :
DTT.NumSpace);
2371 case DTT.NumTimesep:
2372 dtok.dtt = (flag2 ? DTT.NumEnd :
DTT.NumSpace);
2374 case DTT.MonthDatesep:
2375 dtok.dtt = (flag2 ? DTT.MonthEnd :
DTT.MonthSpace);
2383 result.SetBadDateTimeFailure();
2404 while (dtok.
dtt != 0 && dtok.
dtt !=
DTT.NumEnd && dtok.
dtt !=
DTT.MonthEnd);
2407 result.SetBadDateTimeFailure();
2413 result.SetBadDateTimeFailure();
2416 bool bTimeOnly = result.Year == -1 && result.Month == -1 && result.Day == -1;
2421 if (!result.calendar.TryToDateTime(result.Year, result.Month, result.Day, result.Hour, result.Minute, result.Second, 0, result.era, out var result2))
2423 result.SetFailure(
ParseFailureKind.FormatBadDateTimeCalendar,
"Format_BadDateTimeCalendar");
2428 result.SetBadDateTimeFailure();
2431 if (raw.
dayOfWeek != -1 && raw.
dayOfWeek != (
int)result.calendar.GetDayOfWeek(result2))
2433 result.SetFailure(
ParseFailureKind.FormatWithOriginalDateTime,
"Format_BadDayOfWeek");
2436 result.parsedDate = result2;
2446 if ((result.flags &
ParseFlags.CaptureOffset) != 0)
2450 long ticks = result.timeZoneOffset.Ticks;
2451 if (ticks < -504000000000L || ticks > 504000000000
L)
2453 result.SetFailure(
ParseFailureKind.FormatWithOriginalDateTime,
"Format_OffsetOutOfRange");
2456 if ((result.flags &
ParseFlags.TimeZoneUsed) == 0)
2497 if ((result.flags &
ParseFlags.TimeZoneUsed) == 0)
2508 long ticks = result.timeZoneOffset.Ticks;
2509 long num = result.parsedDate.Ticks - ticks;
2510 if (num < 0 || num > 3155378975999999999
L)
2512 result.SetFailure(
ParseFailureKind.FormatWithOriginalDateTime,
"Format_UTCOutOfRange");
2515 if (ticks < -504000000000L || ticks > 504000000000
L)
2517 result.SetFailure(
ParseFailureKind.FormatWithOriginalDateTime,
"Format_OffsetOutOfRange");
2536 long ticks = result.parsedDate.Ticks;
2537 ticks -= result.timeZoneOffset.Ticks;
2540 ticks += 864000000000
L;
2542 if (ticks < 0 || ticks > 3155378975999999999
L)
2544 result.SetFailure(
ParseFailureKind.FormatWithOriginalDateTime,
"Format_DateOutOfRange");
2553 long ticks = result.parsedDate.Ticks;
2555 bool isAmbiguousLocalDst =
false;
2556 if (ticks < 864000000000
L)
2558 ticks -= result.timeZoneOffset.Ticks;
2562 ticks += 864000000000
L;
2567 ticks -= result.timeZoneOffset.Ticks;
2568 if (ticks < 0 || ticks > 3155378975999999999
L)
2578 if (ticks < 0 || ticks > 3155378975999999999
L)
2581 result.SetFailure(
ParseFailureKind.FormatWithOriginalDateTime,
"Format_DateOutOfRange");
2590 if (raw.year >= 0 && raw.GetNumber(0) >= 0)
2597 double result3 = 0.0;
2598 str.SkipWhiteSpaces();
2601 result.SetBadDateTimeFailure();
2604 str.SkipWhiteSpaces();
2605 if (!
str.Match(
':'))
2607 result.SetBadDateTimeFailure();
2610 str.SkipWhiteSpaces();
2613 result.SetBadDateTimeFailure();
2616 str.SkipWhiteSpaces();
2619 str.SkipWhiteSpaces();
2622 result.SetBadDateTimeFailure();
2629 result.SetBadDateTimeFailure();
2634 str.SkipWhiteSpaces();
2638 switch (
str.GetChar())
2645 result.SetBadDateTimeFailure();
2660 str.SkipWhiteSpaces();
2665 result.SetBadDateTimeFailure();
2668 str.SkipWhiteSpaces();
2672 result.SetBadDateTimeFailure();
2677 result.SetBadDateTimeFailure();
2682 if (!defaultInstance.
TryToDateTime(raw.year, raw.GetNumber(0), raw.GetNumber(1), result4, result5, result2, 0, result.era, out var result6))
2684 result.SetFailure(
ParseFailureKind.FormatBadDateTimeCalendar,
"Format_BadDateTimeCalendar");
2687 if (!result6.TryAddTicks((
long)
Math.
Round(result3 * 10000000.0), out result6))
2689 result.SetBadDateTimeFailure();
2692 result.parsedDate = result6;
2727 for (i = 0; i < maxDigitLen; i++)
2729 if (!
str.GetNextDigit())
2734 num = num * 10 +
str.GetDigit();
2737 if (i < minDigitLen)
2747 if (!
str.GetNextDigit())
2752 result =
str.GetDigit();
2754 for (i = 1; i < maxDigitLen; i++)
2756 if (!
str.GetNextDigit())
2761 result = result * 10.0 + (double)
str.GetDigit();
2764 return i == maxDigitLen;
2773 switch (
str.GetChar())
2788 bool result2 =
true;
2791 if ((uint)(
len - 1) <= 1u)
2828 if (result3 < 0 || result3 >= 60)
2832 result =
new TimeSpan(result4, result3, 0);
2835 result = result.Negate();
2842 int maxMatchStrLen = 0;
2846 int num = ((dtfi.GetMonthName(13).Length == 0) ? 12 : 13);
2847 for (
int i = 1; i <= num; i++)
2849 string abbreviatedMonthName = dtfi.GetAbbreviatedMonthName(i);
2850 int matchLength = abbreviatedMonthName.Length;
2851 if ((dtfi.HasSpacesInMonthNames ?
str.MatchSpecifiedWords(abbreviatedMonthName, checkWordBoundary:
false, ref matchLength) :
str.MatchSpecifiedWord(abbreviatedMonthName)) && matchLength > maxMatchStrLen)
2853 maxMatchStrLen = matchLength;
2859 int num2 =
str.MatchLongestWords(dtfi.AbbreviatedMonthGenitiveNames, ref maxMatchStrLen);
2867 int num3 =
str.MatchLongestWords(dtfi.InternalGetLeapYearMonthNames(), ref maxMatchStrLen);
2876 str.Index += maxMatchStrLen - 1;
2884 int maxMatchStrLen = 0;
2888 int num = ((dtfi.GetMonthName(13).Length == 0) ? 12 : 13);
2889 for (
int i = 1; i <= num; i++)
2891 string monthName = dtfi.GetMonthName(i);
2892 int matchLength = monthName.Length;
2893 if ((dtfi.HasSpacesInMonthNames ?
str.MatchSpecifiedWords(monthName, checkWordBoundary:
false, ref matchLength) :
str.MatchSpecifiedWord(monthName)) && matchLength > maxMatchStrLen)
2895 maxMatchStrLen = matchLength;
2901 int num2 =
str.MatchLongestWords(dtfi.MonthGenitiveNames, ref maxMatchStrLen);
2909 int num3 =
str.MatchLongestWords(dtfi.InternalGetLeapYearMonthNames(), ref maxMatchStrLen);
2918 str.Index += maxMatchStrLen - 1;
2932 string abbreviatedDayName = dtfi.GetAbbreviatedDayName(dayOfWeek);
2933 int matchLength = abbreviatedDayName.Length;
2934 if ((dtfi.HasSpacesInDayNames ?
str.MatchSpecifiedWords(abbreviatedDayName, checkWordBoundary:
false, ref matchLength) :
str.MatchSpecifiedWord(abbreviatedDayName)) && matchLength > num)
2937 result = (int)dayOfWeek;
2943 str.Index += num - 1;
2957 string dayName = dtfi.GetDayName(dayOfWeek);
2958 int matchLength = dayName.Length;
2959 if ((dtfi.HasSpacesInDayNames ?
str.MatchSpecifiedWords(dayName, checkWordBoundary:
false, ref matchLength) :
str.MatchSpecifiedWord(dayName)) && matchLength > num)
2962 result = (int)dayOfWeek;
2968 str.Index += num - 1;
2981 for (
int i = 0; i < eras.Length; i++)
2983 string eraName = dtfi.GetEraName(eras[i]);
2984 if (
str.MatchSpecifiedWord(eraName))
2986 str.Index += eraName.Length - 1;
2990 eraName = dtfi.GetAbbreviatedEraName(eras[i]);
2991 if (
str.MatchSpecifiedWord(eraName))
2993 str.Index += eraName.Length - 1;
3017 if (aMDesignator.Length > 0 &&
str.MatchSpecifiedWord(aMDesignator))
3019 str.Index += aMDesignator.Length - 1;
3024 if (aMDesignator.Length > 0 &&
str.MatchSpecifiedWord(aMDesignator))
3026 str.Index += aMDesignator.Length - 1;
3032 if (result !=
TM.NotSet)
3044 if (aMDesignator.Length > 0 &&
str.GetChar() == aMDesignator[0])
3050 if (pMDesignator.Length > 0 &&
str.GetChar() == pMDesignator[0])
3061 if (currentValue == -1)
3063 currentValue = newValue;
3066 if (newValue != currentValue)
3068 result.SetFailure(
ParseFailureKind.FormatWithParameter,
"Format_RepeatDateTimePattern", patternChar);
3076 if ((result.flags &
ParseFlags.CaptureOffset) != 0)
3078 if ((result.flags &
ParseFlags.TimeZoneUsed) != 0)
3092 if ((result.flags &
ParseFlags.CaptureOffset) != 0 && (result.Month != -1 || result.Day != -1) && (result.Year == -1 || (result.flags &
ParseFlags.YearDefault) != 0) && (result.flags &
ParseFlags.TimeZoneUsed) != 0)
3094 result.SetFailure(
ParseFailureKind.FormatWithOriginalDateTime,
"Format_MissingIncompleteDate");
3097 if (result.Year == -1 || result.Month == -1 || result.Day == -1)
3100 if (result.Month == -1 && result.Day == -1)
3102 if (result.Year == -1)
3107 result.Year = (result.Month = (result.Day = 1));
3111 result.Year = cal.GetYear(dateTimeNow);
3112 result.Month = cal.GetMonth(dateTimeNow);
3113 result.Day = cal.GetDayOfMonth(dateTimeNow);
3124 if (result.Year == -1)
3126 result.Year = cal.GetYear(dateTimeNow);
3128 if (result.Month == -1)
3132 if (result.Day == -1)
3138 if (result.Hour == -1)
3142 if (result.Minute == -1)
3146 if (result.Second == -1)
3150 if (result.era == -1)
3173 if ((result.flags &
ParseFlags.CaptureOffset) != 0)
3181 result.timeZoneOffset =
new TimeSpan(0
L);
3200 if (
str.m_current !=
"å…ƒ"[0])
3212 if ((result.flags &
ParseFlags.CaptureOffset) != 0)
3233 double result9 = 0.0;
3234 TM result10 =
TM.AM;
3235 char @
char =
format.GetChar();
3240 int repeatCount =
format.GetRepeatCount();
3247 else if (dtfi.HasForceTwoDigitYears)
3253 if (repeatCount <= 2)
3255 parseInfo.fUseTwoDigitYear =
true;
3259 if (!flag && parseInfo.fCustomNumberParser)
3261 flag = parseInfo.parseNumberDelegate(ref
str, repeatCount, out result2);
3265 result.SetBadDateTimeFailure();
3268 if (!
CheckNewValue(ref result.Year, result2, @
char, ref result))
3276 int repeatCount =
format.GetRepeatCount();
3277 if (repeatCount <= 2)
3279 if (!
ParseDigits(ref
str, repeatCount, out result3) && (!parseInfo.fCustomNumberParser || !parseInfo.parseNumberDelegate(ref
str, repeatCount, out result3)))
3281 result.SetBadDateTimeFailure();
3287 if (repeatCount == 3)
3291 result.SetBadDateTimeFailure();
3297 result.SetBadDateTimeFailure();
3302 if (!
CheckNewValue(ref result.Month, result3, @
char, ref result))
3310 int repeatCount =
format.GetRepeatCount();
3311 if (repeatCount <= 2)
3313 if (!
ParseDigits(ref
str, repeatCount, out result4) && (!parseInfo.fCustomNumberParser || !parseInfo.parseNumberDelegate(ref
str, repeatCount, out result4)))
3315 result.SetBadDateTimeFailure();
3318 if (!
CheckNewValue(ref result.Day, result4, @
char, ref result))
3324 if (repeatCount == 3)
3328 result.SetBadDateTimeFailure();
3334 result.SetBadDateTimeFailure();
3337 if (!
CheckNewValue(ref parseInfo.dayOfWeek, result5, @
char, ref result))
3347 result.SetBadDateTimeFailure();
3353 parseInfo.fUseHour12 =
true;
3354 int repeatCount =
format.GetRepeatCount();
3355 if (!
ParseDigits(ref
str, (repeatCount < 2) ? 1 : 2, out result6))
3357 result.SetBadDateTimeFailure();
3360 if (!
CheckNewValue(ref result.Hour, result6, @
char, ref result))
3368 int repeatCount =
format.GetRepeatCount();
3369 if (!
ParseDigits(ref
str, (repeatCount < 2) ? 1 : 2, out result6))
3371 result.SetBadDateTimeFailure();
3374 if (!
CheckNewValue(ref result.Hour, result6, @
char, ref result))
3382 int repeatCount =
format.GetRepeatCount();
3383 if (!
ParseDigits(ref
str, (repeatCount < 2) ? 1 : 2, out result7))
3385 result.SetBadDateTimeFailure();
3388 if (!
CheckNewValue(ref result.Minute, result7, @
char, ref result))
3396 int repeatCount =
format.GetRepeatCount();
3397 if (!
ParseDigits(ref
str, (repeatCount < 2) ? 1 : 2, out result8))
3399 result.SetBadDateTimeFailure();
3402 if (!
CheckNewValue(ref result.Second, result8, @
char, ref result))
3411 int repeatCount =
format.GetRepeatCount();
3412 if (repeatCount <= 7)
3416 result.SetBadDateTimeFailure();
3419 if (result.fraction < 0.0)
3421 result.fraction = result9;
3423 else if (result9 != result.fraction)
3425 result.SetFailure(
ParseFailureKind.FormatWithParameter,
"Format_RepeatDateTimePattern", @
char);
3430 result.SetBadDateTimeFailure();
3435 int repeatCount =
format.GetRepeatCount();
3436 if (repeatCount == 1)
3440 result.SetBadDateTimeFailure();
3446 result.SetBadDateTimeFailure();
3449 if (parseInfo.timeMark ==
TM.NotSet)
3451 parseInfo.timeMark = result10;
3453 else if (parseInfo.timeMark != result10)
3455 result.SetFailure(
ParseFailureKind.FormatWithParameter,
"Format_RepeatDateTimePattern", @
char);
3462 int repeatCount =
format.GetRepeatCount();
3466 result.SetBadDateTimeFailure();
3469 if ((result.flags &
ParseFlags.TimeZoneUsed) != 0 && result11 != result.timeZoneOffset)
3471 result.SetFailure(
ParseFailureKind.FormatWithParameter,
"Format_RepeatDateTimePattern",
'z');
3474 result.timeZoneOffset = result11;
3481 result.SetFailure(
ParseFailureKind.FormatWithParameter,
"Format_RepeatDateTimePattern",
'Z');
3485 result.timeZoneOffset =
new TimeSpan(0
L);
3490 result.SetBadDateTimeFailure();
3500 result.SetFailure(
ParseFailureKind.FormatWithParameter,
"Format_RepeatDateTimePattern",
'K');
3504 result.timeZoneOffset =
new TimeSpan(0
L);
3507 else if (
str.Match(
'+') ||
str.Match(
'-'))
3513 result.SetBadDateTimeFailure();
3516 if ((result.flags &
ParseFlags.TimeZoneUsed) != 0 && result12 != result.timeZoneOffset)
3518 result.SetFailure(
ParseFailureKind.FormatWithParameter,
"Format_RepeatDateTimePattern",
'K');
3521 result.timeZoneOffset = result12;
3526 if (((dtfi.TimeSeparator.Length > 1 && dtfi.TimeSeparator[0] ==
':') || !
str.Match(
':')) && !
str.Match(dtfi.TimeSeparator))
3528 result.SetBadDateTimeFailure();
3535 result.SetBadDateTimeFailure();
3545 result.SetFailure(
ParseFailureKind.FormatWithParameter,
"Format_BadQuote", @
char);
3549 format.Index += repeatCount - 1;
3551 for (
int i = 0; i < stringAndRelease.Length; i++)
3553 if (stringAndRelease[i] ==
' ' && parseInfo.fAllowInnerWhite)
3555 str.SkipWhiteSpaces();
3557 else if (!
str.Match(stringAndRelease[i]))
3559 result.SetBadDateTimeFailure();
3563 if ((result.flags &
ParseFlags.CaptureOffset) != 0 && (((result.flags &
ParseFlags.Rfc1123Pattern) != 0 && stringAndRelease ==
"GMT") || ((result.flags &
ParseFlags.UtcSortPattern) != 0 && stringAndRelease ==
"Z")))
3573 result.SetBadFormatSpecifierFailure(
format.Value);
3582 result.SetBadDateTimeFailure();
3587 result.SetBadFormatSpecifierFailure(
format.Value);
3590 if (!
str.Match(@
char))
3594 result.SetBadDateTimeFailure();
3603 if (!parseInfo.fAllowInnerWhite && !
str.Match(@
char))
3609 result.SetBadDateTimeFailure();
3613 else if (
format.MatchSpecifiedWord(
"GMT"))
3615 format.Index +=
"GMT".Length - 1;
3618 if (!
str.Match(
"GMT"))
3620 result.SetBadDateTimeFailure();
3624 else if (!
str.Match(@
char))
3626 result.SetBadDateTimeFailure();
3666 returnValue = pos - num;
3674 parseInfo.calendar = dtfi.
Calendar;
3675 parseInfo.fAllowInnerWhite = (styles &
DateTimeStyles.AllowInnerWhite) != 0;
3676 parseInfo.fAllowTrailingWhite = (styles &
DateTimeStyles.AllowTrailingWhite) != 0;
3677 if (formatParam.
Length == 1)
3679 char c = formatParam[0];
3694 if ((result.flags &
ParseFlags.CaptureOffset) != 0 && c ==
'U')
3696 result.SetBadFormatSpecifierFailure(formatParam);
3701 result.calendar = parseInfo.
calendar;
3705 parseInfo.fCustomNumberParser =
true;
3707 result.Hour = (result.Minute = (result.Second = -1));
3713 format.RemoveTrailingInQuoteSpaces();
3718 format.SkipWhiteSpaces();
3719 format.RemoveLeadingInQuoteSpaces();
3720 str.SkipWhiteSpaces();
3726 str.SkipWhiteSpaces();
3733 if (
str.Index <
str.Value.Length - 1)
3735 result.SetBadDateTimeFailure();
3740 if (result.Year >= 100)
3742 result.SetBadDateTimeFailure();
3751 result.SetBadDateTimeFailure();
3759 parseInfo.timeMark =
TM.AM;
3761 if (result.Hour > 12)
3763 result.SetBadDateTimeFailure();
3768 if (result.Hour == 12)
3775 result.Hour = ((result.Hour == 12) ? 12 : (result.Hour + 12));
3778 else if ((parseInfo.
timeMark ==
TM.AM && result.Hour >= 12) || (parseInfo.timeMark == TM.PM && result.Hour < 12))
3780 result.SetBadDateTimeFailure();
3783 bool flag = result.Year == -1 && result.Month == -1 && result.Day == -1;
3788 if (!flag && dtfi.HasYearMonthAdjustment && !dtfi.YearMonthAdjustment(ref result.Year, ref result.Month, (result.flags &
ParseFlags.ParsedMonthName) != 0))
3790 result.SetFailure(
ParseFailureKind.FormatBadDateTimeCalendar,
"Format_BadDateTimeCalendar");
3793 if (!parseInfo.
calendar.
TryToDateTime(result.Year, result.Month, result.Day, result.Hour, result.Minute, result.Second, 0, result.era, out result.parsedDate))
3795 result.SetFailure(
ParseFailureKind.FormatBadDateTimeCalendar,
"Format_BadDateTimeCalendar");
3798 if (result.fraction > 0.0 && !result.parsedDate.TryAddTicks((
long)
Math.
Round(result.fraction * 10000000.0), out result.parsedDate))
3800 result.SetBadDateTimeFailure();
3805 result.SetFailure(
ParseFailureKind.FormatWithOriginalDateTime,
"Format_BadDayOfWeek");
3815 result.SetBadDateTimeFailure();
3822 if ((num | num2 | num3 | num4) > 127)
3824 result.SetBadDateTimeFailure();
3828 switch ((num << 24) | (num2 << 16) | (num3 << 8) | num4 | 0x20202000)
3852 result.SetBadDateTimeFailure();
3857 result.SetBadDateTimeFailure();
3860 uint num5 = (uint)(
source[5] - 48);
3861 uint num6 = (uint)(
source[6] - 48);
3862 if (num5 > 9 || num6 > 9)
3864 result.SetBadDateTimeFailure();
3867 int day = (int)(num5 * 10 + num6);
3870 result.SetBadDateTimeFailure();
3877 if ((num7 | num8 | num9 | num10) > 127)
3879 result.SetBadDateTimeFailure();
3883 switch ((num7 << 24) | (num8 << 16) | (num9 << 8) | num10 | 0x20202000)
3922 result.SetBadDateTimeFailure();
3925 uint num11 = (uint)(
source[12] - 48);
3926 uint num12 = (uint)(
source[13] - 48);
3927 uint num13 = (uint)(
source[14] - 48);
3928 uint num14 = (uint)(
source[15] - 48);
3929 if (num11 > 9 || num12 > 9 || num13 > 9 || num14 > 9)
3931 result.SetBadDateTimeFailure();
3934 int year = (int)(num11 * 1000 + num12 * 100 + num13 * 10 + num14);
3937 result.SetBadDateTimeFailure();
3940 uint num15 = (uint)(
source[17] - 48);
3941 uint num16 = (uint)(
source[18] - 48);
3942 if (num15 > 9 || num16 > 9)
3944 result.SetBadDateTimeFailure();
3947 int hour = (int)(num15 * 10 + num16);
3950 result.SetBadDateTimeFailure();
3953 uint num17 = (uint)(
source[20] - 48);
3954 uint num18 = (uint)(
source[21] - 48);
3955 if (num17 > 9 || num18 > 9)
3957 result.SetBadDateTimeFailure();
3960 int minute = (int)(num17 * 10 + num18);
3963 result.SetBadDateTimeFailure();
3966 uint num19 = (uint)(
source[23] - 48);
3967 uint num20 = (uint)(
source[24] - 48);
3968 if (num19 > 9 || num20 > 9)
3970 result.SetBadDateTimeFailure();
3973 int second = (int)(num19 * 10 + num20);
3976 result.SetBadDateTimeFailure();
3979 if (!parseInfo.calendar.TryToDateTime(
year, month, day, hour, minute, second, 0, 0, out result.parsedDate))
3981 result.SetFailure(
ParseFailureKind.FormatBadDateTimeCalendar,
"Format_BadDateTimeCalendar");
3984 if (dayOfWeek != result.parsedDate.DayOfWeek)
3986 result.SetFailure(
ParseFailureKind.FormatWithOriginalDateTime,
"Format_BadDayOfWeek");
3996 result.SetBadDateTimeFailure();
3999 uint num = (uint)(
source[0] - 48);
4000 uint num2 = (uint)(
source[1] - 48);
4001 uint num3 = (uint)(
source[2] - 48);
4002 uint num4 = (uint)(
source[3] - 48);
4003 if (num > 9 || num2 > 9 || num3 > 9 || num4 > 9)
4005 result.SetBadDateTimeFailure();
4008 int year = (int)(num * 1000 + num2 * 100 + num3 * 10 + num4);
4009 uint num5 = (uint)(
source[5] - 48);
4010 uint num6 = (uint)(
source[6] - 48);
4011 if (num5 > 9 || num6 > 9)
4013 result.SetBadDateTimeFailure();
4016 int month = (int)(num5 * 10 + num6);
4017 uint num7 = (uint)(
source[8] - 48);
4018 uint num8 = (uint)(
source[9] - 48);
4019 if (num7 > 9 || num8 > 9)
4021 result.SetBadDateTimeFailure();
4024 int day = (int)(num7 * 10 + num8);
4025 uint num9 = (uint)(
source[11] - 48);
4026 uint num10 = (uint)(
source[12] - 48);
4027 if (num9 > 9 || num10 > 9)
4029 result.SetBadDateTimeFailure();
4032 int hour = (int)(num9 * 10 + num10);
4033 uint num11 = (uint)(
source[14] - 48);
4034 uint num12 = (uint)(
source[15] - 48);
4035 if (num11 > 9 || num12 > 9)
4037 result.SetBadDateTimeFailure();
4040 int minute = (int)(num11 * 10 + num12);
4041 uint num13 = (uint)(
source[17] - 48);
4042 uint num14 = (uint)(
source[18] - 48);
4043 if (num13 > 9 || num14 > 9)
4045 result.SetBadDateTimeFailure();
4048 int second = (int)(num13 * 10 + num14);
4049 uint num15 = (uint)(
source[20] - 48);
4050 uint num16 = (uint)(
source[21] - 48);
4051 uint num17 = (uint)(
source[22] - 48);
4052 uint num18 = (uint)(
source[23] - 48);
4053 uint num19 = (uint)(
source[24] - 48);
4054 uint num20 = (uint)(
source[25] - 48);
4055 uint num21 = (uint)(
source[26] - 48);
4056 if (num15 > 9 || num16 > 9 || num17 > 9 || num18 > 9 || num19 > 9 || num20 > 9 || num21 > 9)
4058 result.SetBadDateTimeFailure();
4061 double num22 = (double)(num15 * 1000000 + num16 * 100000 + num17 * 10000 + num18 * 1000 + num19 * 100 + num20 * 10 + num21) / 10000000.0;
4064 result.SetBadDateTimeFailure();
4067 if (!result2.TryAddTicks((
long)
Math.
Round(num22 * 10000000.0), out result.parsedDate))
4069 result.SetBadDateTimeFailure();
4072 if ((uint)
source.Length > 27u)
4080 result.SetBadDateTimeFailure();
4083 result.flags |= ParseFlags.TimeZoneUsed |
ParseFlags.TimeZoneUtc;
4092 uint num23 = (uint)(
source[28] - 48);
4093 uint num24 = (uint)(
source[29] - 48);
4094 if (num23 > 9 || num24 > 9)
4096 result.SetBadDateTimeFailure();
4099 num25 = (int)(num23 * 10 + num24);
4106 result.SetBadDateTimeFailure();
4110 if ((uint)num25 > 9u)
4112 result.SetBadDateTimeFailure();
4117 if (
source[num26] !=
':')
4119 result.SetBadDateTimeFailure();
4122 uint num27 = (uint)(
source[num26 + 1] - 48);
4123 uint num28 = (uint)(
source[num26 + 2] - 48);
4124 if (num27 > 9 || num28 > 9)
4126 result.SetBadDateTimeFailure();
4129 int minutes = (int)(num27 * 10 + num28);
4131 result.timeZoneOffset =
new TimeSpan(num25, minutes, 0);
4134 result.timeZoneOffset = result.timeZoneOffset.Negate();
4139 result.SetBadDateTimeFailure();
4148 return result.failure
switch
4156 ParseFailureKind.FormatWithOriginalDateTimeAndParameter =>
new FormatException(
SR.
Format(
SR.
GetResourceString(result.failureMessageID),
new string(result.originalDateTimeString), result.failureMessageFormatArgument)),
static bool AdjustTimeZoneToUniversal(ref DateTimeResult result)
static bool TryParseExactMultiple(ReadOnlySpan< char > s, string[] formats, DateTimeFormatInfo dtfi, DateTimeStyles style, ref DateTimeResult result)
static bool ParseJapaneseEraStart(ref __DTString str, DateTimeFormatInfo dtfi)
static bool TryParse(ReadOnlySpan< char > s, DateTimeFormatInfo dtfi, DateTimeStyles styles, out DateTime result, out TimeSpan offset)
static readonly DS[][] s_dateParsingStates
static Exception GetDateTimeParseException(ref DateTimeResult result)
static bool SetDateYMD(ref DateTimeResult result, int year, int month, int day)
static bool GetDayOfNNN(ref DateTimeResult result, ref DateTimeRawInfo raw, DateTimeFormatInfo dtfi)
static bool ParseFractionExact(ref __DTString str, int maxDigitLen, ref double result)
static bool MatchEraName(ref __DTString str, DateTimeFormatInfo dtfi, ref int result)
static bool TryParseExact(ReadOnlySpan< char > s, ReadOnlySpan< char > format, DateTimeFormatInfo dtfi, DateTimeStyles style, out DateTime result, out TimeSpan offset)
static bool DetermineTimeZoneAdjustments(ref DateTimeResult result, DateTimeStyles styles, bool bTimeOnly)
static bool GetYearMonthDayOrder(string datePattern, out int order)
static string ExpandPredefinedFormat(ReadOnlySpan< char > format, ref DateTimeFormatInfo dtfi, ref ParsingInfo parseInfo, ref DateTimeResult result)
static bool GetDayOfMNN(ref DateTimeResult result, ref DateTimeRawInfo raw, DateTimeFormatInfo dtfi)
static bool GetTimeZoneName(ref __DTString str)
static bool ParseDigits(ref __DTString str, int digitLen, out int result)
static readonly MatchNumberDelegate s_hebrewNumberParser
static bool ParseTimeZoneOffset(ref __DTString str, int len, ref TimeSpan result)
static bool TryParseExactMultiple(ReadOnlySpan< char > s, string[] formats, DateTimeFormatInfo dtfi, DateTimeStyles style, out DateTime result, out TimeSpan offset)
static bool CheckDefaultDateTime(ref DateTimeResult result, ref Calendar cal, DateTimeStyles styles)
static bool GetMonthDayOrder(string pattern, out int order)
static unsafe bool TryParse(ReadOnlySpan< char > s, DateTimeFormatInfo dtfi, DateTimeStyles styles, ref DateTimeResult result)
static bool GetDayOfYM(ref DateTimeResult result, ref DateTimeRawInfo raw)
static bool GetDayOfNM(ref DateTimeResult result, ref DateTimeStyles styles, ref DateTimeRawInfo raw, DateTimeFormatInfo dtfi)
static bool TryAdjustYear(ref DateTimeResult result, int year, out int adjustedYear)
static void AdjustTimeMark(DateTimeFormatInfo dtfi, ref DateTimeRawInfo raw)
static bool GetTimeOfNNN(ref DateTimeResult result, ref DateTimeRawInfo raw)
static bool TryParseExactMultiple(ReadOnlySpan< char > s, string[] formats, DateTimeFormatInfo dtfi, DateTimeStyles style, out DateTime result)
static bool Lex(DS dps, ref __DTString str, ref DateTimeToken dtok, ref DateTimeRawInfo raw, ref DateTimeResult result, ref DateTimeFormatInfo dtfi, DateTimeStyles styles)
static bool ProcessDateTimeSuffix(ref DateTimeResult result, ref DateTimeRawInfo raw, ref DateTimeToken dtok)
static bool IsDigit(char ch)
static bool GetDayOfYN(ref DateTimeResult result, ref DateTimeRawInfo raw)
static bool CheckNewValue(ref int currentValue, int newValue, char patternChar, ref DateTimeResult result)
static bool MatchAbbreviatedTimeMark(ref __DTString str, DateTimeFormatInfo dtfi, ref TM result)
static DateTime Parse(ReadOnlySpan< char > s, DateTimeFormatInfo dtfi, DateTimeStyles styles, out TimeSpan offset)
static bool MatchTimeMark(ref __DTString str, DateTimeFormatInfo dtfi, ref TM result)
static DateTime ParseExactMultiple(ReadOnlySpan< char > s, string[] formats, DateTimeFormatInfo dtfi, DateTimeStyles style, out TimeSpan offset)
static DateTime ParseExact(ReadOnlySpan< char > s, ReadOnlySpan< char > format, DateTimeFormatInfo dtfi, DateTimeStyles style)
static bool ParseDigits(ref __DTString str, int minDigitLen, int maxDigitLen, out int result)
static bool GetDateOfNNDS(ref DateTimeResult result, ref DateTimeRawInfo raw, DateTimeFormatInfo dtfi)
static bool TryParseQuoteString(ReadOnlySpan< char > format, int pos, StringBuilder result, out int returnValue)
static bool SetDateDMY(ref DateTimeResult result, int day, int month, int year)
static bool DateTimeOffsetTimeZonePostProcessing(ref DateTimeResult result, DateTimeStyles styles)
static bool VerifyValidPunctuation(ref __DTString str)
static void ConfigureFormatR(ref DateTimeFormatInfo dtfi, ref ParsingInfo parseInfo, ref DateTimeResult result)
static bool DoStrictParse(ReadOnlySpan< char > s, ReadOnlySpan< char > formatParam, DateTimeStyles styles, DateTimeFormatInfo dtfi, ref DateTimeResult result)
static bool AdjustTimeZoneToLocal(ref DateTimeResult result, bool bTimeOnly)
static bool HandleTimeZone(ref __DTString str, ref DateTimeResult result)
static bool GetHebrewDayOfNM(ref DateTimeResult result, ref DateTimeRawInfo raw, DateTimeFormatInfo dtfi)
static bool GetTimeOfNN(ref DateTimeResult result, ref DateTimeRawInfo raw)
static bool TryParseExact(ReadOnlySpan< char > s, ReadOnlySpan< char > format, DateTimeFormatInfo dtfi, DateTimeStyles style, ref DateTimeResult result)
static bool ProcessTerminalState(DS dps, ref DateTimeResult result, ref DateTimeStyles styles, ref DateTimeRawInfo raw, DateTimeFormatInfo dtfi)
static bool GetYearMonthOrder(string pattern, out int order)
static DateTime ParseExact(ReadOnlySpan< char > s, ReadOnlySpan< char > format, DateTimeFormatInfo dtfi, DateTimeStyles style, out TimeSpan offset)
static bool GetDateOfNDS(ref DateTimeResult result, ref DateTimeRawInfo raw)
static bool TryParse(ReadOnlySpan< char > s, DateTimeFormatInfo dtfi, DateTimeStyles styles, out DateTime result)
static bool GetDayOfYNN(ref DateTimeResult result, ref DateTimeRawInfo raw, DateTimeFormatInfo dtfi)
static DateTime GetDateTimeNow(ref DateTimeResult result, ref DateTimeStyles styles)
static DateTime Parse(ReadOnlySpan< char > s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
static void GetDefaultYear(ref DateTimeResult result, ref DateTimeStyles styles)
static bool GetTimeOfN(ref DateTimeResult result, ref DateTimeRawInfo raw)
static bool ParseByFormat(ref __DTString str, ref __DTString format, ref ParsingInfo parseInfo, DateTimeFormatInfo dtfi, ref DateTimeResult result)
delegate bool MatchNumberDelegate(ref __DTString str, int digitLen, out int result)
static DateTime ParseExactMultiple(ReadOnlySpan< char > s, string[] formats, DateTimeFormatInfo dtfi, DateTimeStyles style)
static bool MatchMonthName(ref __DTString str, DateTimeFormatInfo dtfi, ref int result)
static bool GetDayOfNNY(ref DateTimeResult result, ref DateTimeRawInfo raw, DateTimeFormatInfo dtfi)
static bool SetDateYDM(ref DateTimeResult result, int year, int day, int month)
static bool GetDayOfMN(ref DateTimeResult result, ref DateTimeStyles styles, ref DateTimeRawInfo raw, DateTimeFormatInfo dtfi)
static bool GetDayOfNN(ref DateTimeResult result, ref DateTimeStyles styles, ref DateTimeRawInfo raw, DateTimeFormatInfo dtfi)
static bool ProcessHebrewTerminalState(DS dps, ref DateTimeResult result, ref DateTimeStyles styles, ref DateTimeRawInfo raw, DateTimeFormatInfo dtfi)
static bool TryParseExact(ReadOnlySpan< char > s, ReadOnlySpan< char > format, DateTimeFormatInfo dtfi, DateTimeStyles style, out DateTime result)
static bool MatchHebrewDigits(ref __DTString str, int digitLen, out int number)
static bool MatchAbbreviatedDayName(ref __DTString str, DateTimeFormatInfo dtfi, ref int result)
static void ConfigureFormatOS(ref DateTimeFormatInfo dtfi, ref ParsingInfo parseInfo)
static bool MatchWord(ref __DTString str, string target)
static bool ParseFormatO(ReadOnlySpan< char > source, ref DateTimeResult result)
static bool MatchAbbreviatedMonthName(ref __DTString str, DateTimeFormatInfo dtfi, ref int result)
static bool ParseFraction(ref __DTString str, out double result)
static bool SetDateMDY(ref DateTimeResult result, int month, int day, int year)
static bool MatchDayName(ref __DTString str, DateTimeFormatInfo dtfi, ref int result)
static bool ParseFormatR(ReadOnlySpan< char > source, ref ParsingInfo parseInfo, ref DateTimeResult result)
static bool ParseISO8601(ref DateTimeRawInfo raw, ref __DTString str, DateTimeStyles styles, ref DateTimeResult result)
static bool ParseTimeZone(ref __DTString str, ref TimeSpan result)
static bool GetDayOfYMN(ref DateTimeResult result, ref DateTimeRawInfo raw)
static bool GetDateOfDSN(ref DateTimeResult result, ref DateTimeRawInfo raw)
static bool AdjustHour(ref int hour, TM timeMark)
static bool ParseSign(ref __DTString str, ref bool result)
virtual int ToFourDigitYear(int year)
DayOfWeek GetDayOfWeek(DateTime time)
virtual bool TryToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int era, out DateTime result)
static Calendar GetDefaultInstance()
static HebrewNumberParsingState ParseByChar(char ch, ref HebrewNumberParsingContext context)
static Calendar GetDefaultInstance()
static Calendar GetDefaultInstance()
static long Pow10(int pow)
static bool EnforceLegacyJapaneseDateParsing
static decimal Round(decimal d)
static string Format(string resourceFormat, object p1)
static string GetResourceString(string resourceKey)
static string GetStringAndRelease(StringBuilder sb)
static void Release(StringBuilder sb)
static StringBuilder Acquire(int capacity=16)
StringBuilder Append(char value, int repeatCount)
static TimeZoneInfo Local
TimeSpan GetUtcOffset(DateTimeOffset dateTimeOffset)
static TimeSpan GetUtcOffsetFromUtc(DateTime time, TimeZoneInfo zone)
static TimeSpan GetLocalUtcOffset(DateTime dateTime, TimeZoneInfoOptions flags)
unsafe void Init(int *numberBuffer)
DateTimeParse.TM timeMark
void Init(ReadOnlySpan< char > originalDateTimeString)
static readonly DateTime MinValue
static unsafe DateTime UtcNow
static DateTime SpecifyKind(DateTime value, DateTimeKind kind)
static bool TryCreate(int year, int month, int day, int hour, int minute, int second, int millisecond, out DateTime result)
DateTimeParse.TM timeMark
static readonly TimeSpan Zero