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

◆ TryParseDateTimeOffsetO()

static bool System.Buffers.Text.Utf8Parser.TryParseDateTimeOffsetO ( ReadOnlySpan< byte > source,
out DateTimeOffset value,
out int bytesConsumed,
out DateTimeKind kind )
inlinestaticprivate

Definition at line 569 of file Utf8Parser.cs.

570 {
571 if (source.Length < 27)
572 {
573 value = default(DateTimeOffset);
574 bytesConsumed = 0;
575 kind = DateTimeKind.Unspecified;
576 return false;
577 }
578 uint num = (uint)(source[0] - 48);
579 uint num2 = (uint)(source[1] - 48);
580 uint num3 = (uint)(source[2] - 48);
581 uint num4 = (uint)(source[3] - 48);
582 if (num > 9 || num2 > 9 || num3 > 9 || num4 > 9)
583 {
584 value = default(DateTimeOffset);
585 bytesConsumed = 0;
586 kind = DateTimeKind.Unspecified;
587 return false;
588 }
589 int year = (int)(num * 1000 + num2 * 100 + num3 * 10 + num4);
590 if (source[4] != 45)
591 {
592 value = default(DateTimeOffset);
593 bytesConsumed = 0;
594 kind = DateTimeKind.Unspecified;
595 return false;
596 }
597 uint num5 = (uint)(source[5] - 48);
598 uint num6 = (uint)(source[6] - 48);
599 if (num5 > 9 || num6 > 9)
600 {
601 value = default(DateTimeOffset);
602 bytesConsumed = 0;
603 kind = DateTimeKind.Unspecified;
604 return false;
605 }
606 int month = (int)(num5 * 10 + num6);
607 if (source[7] != 45)
608 {
609 value = default(DateTimeOffset);
610 bytesConsumed = 0;
611 kind = DateTimeKind.Unspecified;
612 return false;
613 }
614 uint num7 = (uint)(source[8] - 48);
615 uint num8 = (uint)(source[9] - 48);
616 if (num7 > 9 || num8 > 9)
617 {
618 value = default(DateTimeOffset);
619 bytesConsumed = 0;
620 kind = DateTimeKind.Unspecified;
621 return false;
622 }
623 int day = (int)(num7 * 10 + num8);
624 if (source[10] != 84)
625 {
626 value = default(DateTimeOffset);
627 bytesConsumed = 0;
628 kind = DateTimeKind.Unspecified;
629 return false;
630 }
631 uint num9 = (uint)(source[11] - 48);
632 uint num10 = (uint)(source[12] - 48);
633 if (num9 > 9 || num10 > 9)
634 {
635 value = default(DateTimeOffset);
636 bytesConsumed = 0;
637 kind = DateTimeKind.Unspecified;
638 return false;
639 }
640 int hour = (int)(num9 * 10 + num10);
641 if (source[13] != 58)
642 {
643 value = default(DateTimeOffset);
644 bytesConsumed = 0;
645 kind = DateTimeKind.Unspecified;
646 return false;
647 }
648 uint num11 = (uint)(source[14] - 48);
649 uint num12 = (uint)(source[15] - 48);
650 if (num11 > 9 || num12 > 9)
651 {
652 value = default(DateTimeOffset);
653 bytesConsumed = 0;
654 kind = DateTimeKind.Unspecified;
655 return false;
656 }
657 int minute = (int)(num11 * 10 + num12);
658 if (source[16] != 58)
659 {
660 value = default(DateTimeOffset);
661 bytesConsumed = 0;
662 kind = DateTimeKind.Unspecified;
663 return false;
664 }
665 uint num13 = (uint)(source[17] - 48);
666 uint num14 = (uint)(source[18] - 48);
667 if (num13 > 9 || num14 > 9)
668 {
669 value = default(DateTimeOffset);
670 bytesConsumed = 0;
671 kind = DateTimeKind.Unspecified;
672 return false;
673 }
674 int second = (int)(num13 * 10 + num14);
675 if (source[19] != 46)
676 {
677 value = default(DateTimeOffset);
678 bytesConsumed = 0;
679 kind = DateTimeKind.Unspecified;
680 return false;
681 }
682 uint num15 = (uint)(source[20] - 48);
683 uint num16 = (uint)(source[21] - 48);
684 uint num17 = (uint)(source[22] - 48);
685 uint num18 = (uint)(source[23] - 48);
686 uint num19 = (uint)(source[24] - 48);
687 uint num20 = (uint)(source[25] - 48);
688 uint num21 = (uint)(source[26] - 48);
689 if (num15 > 9 || num16 > 9 || num17 > 9 || num18 > 9 || num19 > 9 || num20 > 9 || num21 > 9)
690 {
691 value = default(DateTimeOffset);
692 bytesConsumed = 0;
693 kind = DateTimeKind.Unspecified;
694 return false;
695 }
696 int fraction = (int)(num15 * 1000000 + num16 * 100000 + num17 * 10000 + num18 * 1000 + num19 * 100 + num20 * 10 + num21);
697 byte b = (byte)((source.Length > 27) ? source[27] : 0);
698 if (b != 90 && b != 43 && b != 45)
699 {
700 if (!TryCreateDateTimeOffsetInterpretingDataAsLocalTime(year, month, day, hour, minute, second, fraction, out value))
701 {
702 value = default(DateTimeOffset);
703 bytesConsumed = 0;
704 kind = DateTimeKind.Unspecified;
705 return false;
706 }
707 bytesConsumed = 27;
708 kind = DateTimeKind.Unspecified;
709 return true;
710 }
711 if (b == 90)
712 {
713 if (!TryCreateDateTimeOffset(year, month, day, hour, minute, second, fraction, offsetNegative: false, 0, 0, out value))
714 {
715 value = default(DateTimeOffset);
716 bytesConsumed = 0;
717 kind = DateTimeKind.Unspecified;
718 return false;
719 }
720 bytesConsumed = 28;
721 kind = DateTimeKind.Utc;
722 return true;
723 }
724 if (source.Length < 33)
725 {
726 value = default(DateTimeOffset);
727 bytesConsumed = 0;
728 kind = DateTimeKind.Unspecified;
729 return false;
730 }
731 uint num22 = (uint)(source[28] - 48);
732 uint num23 = (uint)(source[29] - 48);
733 if (num22 > 9 || num23 > 9)
734 {
735 value = default(DateTimeOffset);
736 bytesConsumed = 0;
737 kind = DateTimeKind.Unspecified;
738 return false;
739 }
740 int offsetHours = (int)(num22 * 10 + num23);
741 if (source[30] != 58)
742 {
743 value = default(DateTimeOffset);
744 bytesConsumed = 0;
745 kind = DateTimeKind.Unspecified;
746 return false;
747 }
748 uint num24 = (uint)(source[31] - 48);
749 uint num25 = (uint)(source[32] - 48);
750 if (num24 > 9 || num25 > 9)
751 {
752 value = default(DateTimeOffset);
753 bytesConsumed = 0;
754 kind = DateTimeKind.Unspecified;
755 return false;
756 }
757 int offsetMinutes = (int)(num24 * 10 + num25);
758 if (!TryCreateDateTimeOffset(year, month, day, hour, minute, second, fraction, b == 45, offsetHours, offsetMinutes, out value))
759 {
760 value = default(DateTimeOffset);
761 bytesConsumed = 0;
762 kind = DateTimeKind.Unspecified;
763 return false;
764 }
765 bytesConsumed = 33;
766 kind = DateTimeKind.Local;
767 return true;
768 }
static bool TryCreateDateTimeOffset(DateTime dateTime, bool offsetNegative, int offsetHours, int offsetMinutes, out DateTimeOffset value)
static bool TryCreateDateTimeOffsetInterpretingDataAsLocalTime(int year, int month, int day, int hour, int minute, int second, int fraction, out DateTimeOffset value)

References System.source, System.Buffers.Text.Utf8Parser.TryCreateDateTimeOffset(), System.Buffers.Text.Utf8Parser.TryCreateDateTimeOffsetInterpretingDataAsLocalTime(), System.value, and System.year.

Referenced by System.Buffers.Text.Utf8Parser.TryParse(), and System.Buffers.Text.Utf8Parser.TryParse().