3993 {
3995 {
3996 result.SetBadDateTimeFailure();
3997 return false;
3998 }
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)
4004 {
4005 result.SetBadDateTimeFailure();
4006 return false;
4007 }
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)
4012 {
4013 result.SetBadDateTimeFailure();
4014 return false;
4015 }
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)
4020 {
4021 result.SetBadDateTimeFailure();
4022 return false;
4023 }
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)
4028 {
4029 result.SetBadDateTimeFailure();
4030 return false;
4031 }
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)
4036 {
4037 result.SetBadDateTimeFailure();
4038 return false;
4039 }
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)
4044 {
4045 result.SetBadDateTimeFailure();
4046 return false;
4047 }
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)
4057 {
4058 result.SetBadDateTimeFailure();
4059 return false;
4060 }
4061 double num22 = (double)(num15 * 1000000 + num16 * 100000 + num17 * 10000 + num18 * 1000 + num19 * 100 + num20 * 10 + num21) / 10000000.0;
4062 if (!
DateTime.TryCreate(
year, month, day, hour, minute, second, 0, out var result2))
4063 {
4064 result.SetBadDateTimeFailure();
4065 return false;
4066 }
4067 if (!result2.TryAddTicks((long)Math.Round(num22 * 10000000.0), out result.parsedDate))
4068 {
4069 result.SetBadDateTimeFailure();
4070 return false;
4071 }
4072 if ((uint)
source.Length > 27u)
4073 {
4075 switch (c)
4076 {
4077 case 'Z':
4079 {
4080 result.SetBadDateTimeFailure();
4081 return false;
4082 }
4083 result.flags |= ParseFlags.TimeZoneUsed | ParseFlags.TimeZoneUtc;
4084 break;
4085 case '+':
4086 case '-':
4087 {
4088 int num25;
4089 int num26;
4091 {
4092 uint num23 = (uint)(
source[28] - 48);
4093 uint num24 = (uint)(
source[29] - 48);
4094 if (num23 > 9 || num24 > 9)
4095 {
4096 result.SetBadDateTimeFailure();
4097 return false;
4098 }
4099 num25 = (int)(num23 * 10 + num24);
4100 num26 = 30;
4101 }
4102 else
4103 {
4105 {
4106 result.SetBadDateTimeFailure();
4107 return false;
4108 }
4110 if ((uint)num25 > 9u)
4111 {
4112 result.SetBadDateTimeFailure();
4113 return false;
4114 }
4115 num26 = 29;
4116 }
4117 if (
source[num26] !=
':')
4118 {
4119 result.SetBadDateTimeFailure();
4120 return false;
4121 }
4122 uint num27 = (uint)(
source[num26 + 1] - 48);
4123 uint num28 = (uint)(
source[num26 + 2] - 48);
4124 if (num27 > 9 || num28 > 9)
4125 {
4126 result.SetBadDateTimeFailure();
4127 return false;
4128 }
4129 int minutes = (int)(num27 * 10 + num28);
4130 result.flags |= ParseFlags.TimeZoneUsed;
4131 result.timeZoneOffset =
new TimeSpan(num25, minutes, 0);
4132 if (c == '-')
4133 {
4134 result.timeZoneOffset = result.timeZoneOffset.Negate();
4135 }
4136 break;
4137 }
4138 default:
4139 result.SetBadDateTimeFailure();
4140 return false;
4141 }
4142 }
4144 }
static bool DetermineTimeZoneAdjustments(ref DateTimeResult result, DateTimeStyles styles, bool bTimeOnly)