2301 {
2303 {
2304 result.SetFailure(ParseFailureKind.FormatWithParameter, "Format_BadDateTime");
2305 return false;
2306 }
2308 bool flag = false;
2309 DateTimeToken dtok = default(DateTimeToken);
2310 dtok.suffix = TokenType.SEP_Unk;
2311 DateTimeRawInfo raw = default(DateTimeRawInfo);
2312 int* numberBuffer = stackalloc int[3];
2313 raw.Init(numberBuffer);
2316 result.era = 0;
2317 __DTString
str =
new __DTString(
s, dtfi);
2319 do
2320 {
2321 if (!
Lex(dS, ref
str, ref dtok, ref raw, ref result, ref dtfi, styles))
2322 {
2323 return false;
2324 }
2325 if (dtok.dtt ==
DTT.Unk)
2326 {
2327 continue;
2328 }
2329 if (dtok.suffix != TokenType.SEP_Unk)
2330 {
2332 {
2333 result.SetBadDateTimeFailure();
2334 return false;
2335 }
2336 dtok.suffix = TokenType.SEP_Unk;
2337 }
2338 if (dtok.dtt ==
DTT.NumLocalTimeMark)
2339 {
2340 if (dS ==
DS.D_YNd || dS ==
DS.D_YN)
2341 {
2343 }
2344 result.SetBadDateTimeFailure();
2345 return false;
2346 }
2347 if (raw.hasSameDateAndTimeSeparators)
2348 {
2349 if (dtok.dtt ==
DTT.YearEnd || dtok.dtt ==
DTT.YearSpace || dtok.dtt ==
DTT.YearDateSep)
2350 {
2352 {
2354 }
2356 {
2358 }
2359 }
2360 bool flag2 =
str.AtEnd();
2362 {
2363 switch (dtok.dtt)
2364 {
2365 case DTT.YearDateSep:
2366 dtok.dtt = (flag2 ? DTT.YearEnd :
DTT.YearSpace);
2367 break;
2368 case DTT.NumDatesep:
2369 dtok.dtt = (flag2 ? DTT.NumEnd :
DTT.NumSpace);
2370 break;
2371 case DTT.NumTimesep:
2372 dtok.dtt = (flag2 ? DTT.NumEnd :
DTT.NumSpace);
2373 break;
2374 case DTT.MonthDatesep:
2375 dtok.dtt = (flag2 ? DTT.MonthEnd :
DTT.MonthSpace);
2376 break;
2377 }
2378 }
2379 }
2382 {
2383 result.SetBadDateTimeFailure();
2384 return false;
2385 }
2387 {
2388 continue;
2389 }
2391 {
2393 {
2394 return false;
2395 }
2396 }
2398 {
2399 return false;
2400 }
2401 flag = true;
2403 }
2404 while (dtok.dtt != 0 && dtok.dtt !=
DTT.NumEnd && dtok.dtt !=
DTT.MonthEnd);
2405 if (!flag)
2406 {
2407 result.SetBadDateTimeFailure();
2408 return false;
2409 }
2411 if (!
AdjustHour(ref result.Hour, raw.timeMark))
2412 {
2413 result.SetBadDateTimeFailure();
2414 return false;
2415 }
2416 bool bTimeOnly = result.Year == -1 && result.Month == -1 && result.Day == -1;
2418 {
2419 return false;
2420 }
2421 if (!result.calendar.TryToDateTime(result.Year, result.Month, result.Day, result.Hour, result.Minute, result.Second, 0, result.era, out var result2))
2422 {
2423 result.SetFailure(ParseFailureKind.FormatBadDateTimeCalendar, "Format_BadDateTimeCalendar");
2424 return false;
2425 }
2426 if (raw.fraction > 0.0 && !result2.TryAddTicks((long)Math.Round(raw.fraction * 10000000.0), out result2))
2427 {
2428 result.SetBadDateTimeFailure();
2429 return false;
2430 }
2431 if (raw.dayOfWeek != -1 && raw.dayOfWeek != (int)result.calendar.GetDayOfWeek(result2))
2432 {
2433 result.SetFailure(ParseFailureKind.FormatWithOriginalDateTime, "Format_BadDayOfWeek");
2434 return false;
2435 }
2436 result.parsedDate = result2;
2438 {
2439 return false;
2440 }
2441 return true;
2442 }
static readonly DS[][] s_dateParsingStates
static bool DetermineTimeZoneAdjustments(ref DateTimeResult result, DateTimeStyles styles, bool bTimeOnly)
static bool CheckDefaultDateTime(ref DateTimeResult result, ref Calendar cal, DateTimeStyles styles)
static void AdjustTimeMark(DateTimeFormatInfo dtfi, ref DateTimeRawInfo raw)
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 ProcessTerminalState(DS dps, 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 ParseISO8601(ref DateTimeRawInfo raw, ref __DTString str, DateTimeStyles styles, ref DateTimeResult result)
static bool AdjustHour(ref int hour, TM timeMark)