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

◆ ParseFormatR()

static bool System.DateTimeParse.ParseFormatR ( ReadOnlySpan< char > source,
ref ParsingInfo parseInfo,
ref DateTimeResult result )
inlinestaticprivate

Definition at line 3811 of file DateTimeParse.cs.

3812 {
3813 if (source.Length != 29)
3814 {
3815 result.SetBadDateTimeFailure();
3816 return false;
3817 }
3818 uint num = source[0];
3819 uint num2 = source[1];
3820 uint num3 = source[2];
3821 uint num4 = source[3];
3822 if ((num | num2 | num3 | num4) > 127)
3823 {
3824 result.SetBadDateTimeFailure();
3825 return false;
3826 }
3827 DayOfWeek dayOfWeek;
3828 switch ((num << 24) | (num2 << 16) | (num3 << 8) | num4 | 0x20202000)
3829 {
3830 case 1937075756u:
3831 dayOfWeek = DayOfWeek.Sunday;
3832 break;
3833 case 1836019244u:
3834 dayOfWeek = DayOfWeek.Monday;
3835 break;
3836 case 1953850668u:
3837 dayOfWeek = DayOfWeek.Tuesday;
3838 break;
3839 case 2003133484u:
3840 dayOfWeek = DayOfWeek.Wednesday;
3841 break;
3842 case 1953002796u:
3843 dayOfWeek = DayOfWeek.Thursday;
3844 break;
3845 case 1718774060u:
3846 dayOfWeek = DayOfWeek.Friday;
3847 break;
3848 case 1935766572u:
3849 dayOfWeek = DayOfWeek.Saturday;
3850 break;
3851 default:
3852 result.SetBadDateTimeFailure();
3853 return false;
3854 }
3855 if (source[4] != ' ')
3856 {
3857 result.SetBadDateTimeFailure();
3858 return false;
3859 }
3860 uint num5 = (uint)(source[5] - 48);
3861 uint num6 = (uint)(source[6] - 48);
3862 if (num5 > 9 || num6 > 9)
3863 {
3864 result.SetBadDateTimeFailure();
3865 return false;
3866 }
3867 int day = (int)(num5 * 10 + num6);
3868 if (source[7] != ' ')
3869 {
3870 result.SetBadDateTimeFailure();
3871 return false;
3872 }
3873 uint num7 = source[8];
3874 uint num8 = source[9];
3875 uint num9 = source[10];
3876 uint num10 = source[11];
3877 if ((num7 | num8 | num9 | num10) > 127)
3878 {
3879 result.SetBadDateTimeFailure();
3880 return false;
3881 }
3882 int month;
3883 switch ((num7 << 24) | (num8 << 16) | (num9 << 8) | num10 | 0x20202000)
3884 {
3885 case 1784770080u:
3886 month = 1;
3887 break;
3888 case 1717920288u:
3889 month = 2;
3890 break;
3891 case 1835102752u:
3892 month = 3;
3893 break;
3894 case 1634759200u:
3895 month = 4;
3896 break;
3897 case 1835104544u:
3898 month = 5;
3899 break;
3900 case 1786080800u:
3901 month = 6;
3902 break;
3903 case 1786080288u:
3904 month = 7;
3905 break;
3906 case 1635084064u:
3907 month = 8;
3908 break;
3909 case 1936027680u:
3910 month = 9;
3911 break;
3912 case 1868788768u:
3913 month = 10;
3914 break;
3915 case 1852798496u:
3916 month = 11;
3917 break;
3918 case 1684366112u:
3919 month = 12;
3920 break;
3921 default:
3922 result.SetBadDateTimeFailure();
3923 return false;
3924 }
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)
3930 {
3931 result.SetBadDateTimeFailure();
3932 return false;
3933 }
3934 int year = (int)(num11 * 1000 + num12 * 100 + num13 * 10 + num14);
3935 if (source[16] != ' ')
3936 {
3937 result.SetBadDateTimeFailure();
3938 return false;
3939 }
3940 uint num15 = (uint)(source[17] - 48);
3941 uint num16 = (uint)(source[18] - 48);
3942 if (num15 > 9 || num16 > 9)
3943 {
3944 result.SetBadDateTimeFailure();
3945 return false;
3946 }
3947 int hour = (int)(num15 * 10 + num16);
3948 if (source[19] != ':')
3949 {
3950 result.SetBadDateTimeFailure();
3951 return false;
3952 }
3953 uint num17 = (uint)(source[20] - 48);
3954 uint num18 = (uint)(source[21] - 48);
3955 if (num17 > 9 || num18 > 9)
3956 {
3957 result.SetBadDateTimeFailure();
3958 return false;
3959 }
3960 int minute = (int)(num17 * 10 + num18);
3961 if (source[22] != ':')
3962 {
3963 result.SetBadDateTimeFailure();
3964 return false;
3965 }
3966 uint num19 = (uint)(source[23] - 48);
3967 uint num20 = (uint)(source[24] - 48);
3968 if (num19 > 9 || num20 > 9)
3969 {
3970 result.SetBadDateTimeFailure();
3971 return false;
3972 }
3973 int second = (int)(num19 * 10 + num20);
3974 if (source[25] != ' ' || source[26] != 'G' || source[27] != 'M' || source[28] != 'T')
3975 {
3976 result.SetBadDateTimeFailure();
3977 return false;
3978 }
3979 if (!parseInfo.calendar.TryToDateTime(year, month, day, hour, minute, second, 0, 0, out result.parsedDate))
3980 {
3981 result.SetFailure(ParseFailureKind.FormatBadDateTimeCalendar, "Format_BadDateTimeCalendar");
3982 return false;
3983 }
3984 if (dayOfWeek != result.parsedDate.DayOfWeek)
3985 {
3986 result.SetFailure(ParseFailureKind.FormatWithOriginalDateTime, "Format_BadDayOfWeek");
3987 return false;
3988 }
3989 return true;
3990 }

References System.source, and System.year.

Referenced by System.DateTimeParse.DoStrictParse().