Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ParseISO8601()

static bool System.DateTimeParse.ParseISO8601 ( ref DateTimeRawInfo raw,
ref __DTString str,
DateTimeStyles styles,
ref DateTimeResult result )
inlinestaticprivate

Definition at line 2588 of file DateTimeParse.cs.

2589 {
2590 if (raw.year >= 0 && raw.GetNumber(0) >= 0)
2591 {
2592 raw.GetNumber(1);
2593 _ = 0;
2594 }
2595 str.Index--;
2596 int result2 = 0;
2597 double result3 = 0.0;
2598 str.SkipWhiteSpaces();
2599 if (!ParseDigits(ref str, 2, out var result4))
2600 {
2601 result.SetBadDateTimeFailure();
2602 return false;
2603 }
2604 str.SkipWhiteSpaces();
2605 if (!str.Match(':'))
2606 {
2607 result.SetBadDateTimeFailure();
2608 return false;
2609 }
2610 str.SkipWhiteSpaces();
2611 if (!ParseDigits(ref str, 2, out var result5))
2612 {
2613 result.SetBadDateTimeFailure();
2614 return false;
2615 }
2616 str.SkipWhiteSpaces();
2617 if (str.Match(':'))
2618 {
2619 str.SkipWhiteSpaces();
2620 if (!ParseDigits(ref str, 2, out result2))
2621 {
2622 result.SetBadDateTimeFailure();
2623 return false;
2624 }
2625 if (str.Match('.'))
2626 {
2627 if (!ParseFraction(ref str, out result3))
2628 {
2629 result.SetBadDateTimeFailure();
2630 return false;
2631 }
2632 str.Index--;
2633 }
2634 str.SkipWhiteSpaces();
2635 }
2636 if (str.GetNext())
2637 {
2638 switch (str.GetChar())
2639 {
2640 case '+':
2641 case '-':
2642 result.flags |= ParseFlags.TimeZoneUsed;
2643 if (!ParseTimeZone(ref str, ref result.timeZoneOffset))
2644 {
2645 result.SetBadDateTimeFailure();
2646 return false;
2647 }
2648 str.Index--;
2649 break;
2650 case 'Z':
2651 case 'z':
2652 result.flags |= ParseFlags.TimeZoneUsed;
2653 result.timeZoneOffset = TimeSpan.Zero;
2654 result.flags |= ParseFlags.TimeZoneUtc;
2655 break;
2656 default:
2657 str.Index--;
2658 break;
2659 }
2660 str.SkipWhiteSpaces();
2661 if (str.Match('#'))
2662 {
2663 if (!VerifyValidPunctuation(ref str))
2664 {
2665 result.SetBadDateTimeFailure();
2666 return false;
2667 }
2668 str.SkipWhiteSpaces();
2669 }
2670 if (str.Match('\0') && !VerifyValidPunctuation(ref str))
2671 {
2672 result.SetBadDateTimeFailure();
2673 return false;
2674 }
2675 if (str.GetNext())
2676 {
2677 result.SetBadDateTimeFailure();
2678 return false;
2679 }
2680 }
2681 Calendar defaultInstance = GregorianCalendar.GetDefaultInstance();
2682 if (!defaultInstance.TryToDateTime(raw.year, raw.GetNumber(0), raw.GetNumber(1), result4, result5, result2, 0, result.era, out var result6))
2683 {
2684 result.SetFailure(ParseFailureKind.FormatBadDateTimeCalendar, "Format_BadDateTimeCalendar");
2685 return false;
2686 }
2687 if (!result6.TryAddTicks((long)Math.Round(result3 * 10000000.0), out result6))
2688 {
2689 result.SetBadDateTimeFailure();
2690 return false;
2691 }
2692 result.parsedDate = result6;
2693 return DetermineTimeZoneAdjustments(ref result, styles, bTimeOnly: false);
2694 }
static bool DetermineTimeZoneAdjustments(ref DateTimeResult result, DateTimeStyles styles, bool bTimeOnly)
static bool ParseDigits(ref __DTString str, int digitLen, out int result)
static bool VerifyValidPunctuation(ref __DTString str)
static bool ParseFraction(ref __DTString str, out double result)
static bool ParseTimeZone(ref __DTString str, ref TimeSpan result)
virtual bool TryToDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, int era, out DateTime result)
Definition Calendar.cs:311

References System.DateTimeParse.DetermineTimeZoneAdjustments(), System.Globalization.GregorianCalendar.GetDefaultInstance(), System.DateTimeParse.ParseDigits(), System.DateTimeParse.ParseFraction(), System.DateTimeParse.ParseTimeZone(), System.Math.Round(), System.str, System.Globalization.Calendar.TryToDateTime(), System.DateTimeParse.VerifyValidPunctuation(), and System.TimeSpan.Zero.

Referenced by System.DateTimeParse.TryParse().