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

◆ TryParseDateTime()

static bool System.Xml.XmlConverter.TryParseDateTime ( byte[] chars,
int offset,
int count,
out DateTime result )
inlinestaticprivate

Definition at line 1022 of file XmlConverter.cs.

1023 {
1024 int num = offset + count;
1025 result = DateTime.MaxValue;
1026 if (count < 19)
1027 {
1028 return false;
1029 }
1030 if (chars[offset + 4] != 45 || chars[offset + 7] != 45 || chars[offset + 10] != 84 || chars[offset + 13] != 58 || chars[offset + 16] != 58)
1031 {
1032 return false;
1033 }
1034 int num2 = ToInt32D4(chars, offset, 4);
1035 int num3 = ToInt32D2(chars, offset + 5);
1036 int num4 = ToInt32D2(chars, offset + 8);
1037 int num5 = ToInt32D2(chars, offset + 11);
1038 int num6 = ToInt32D2(chars, offset + 14);
1039 int num7 = ToInt32D2(chars, offset + 17);
1040 if ((num2 | num3 | num4 | num5 | num6 | num7) < 0)
1041 {
1042 return false;
1043 }
1044 DateTimeKind kind = DateTimeKind.Unspecified;
1045 offset += 19;
1046 int num8 = 0;
1047 if (offset < num && chars[offset] == 46)
1048 {
1049 offset++;
1050 int num9 = offset;
1051 while (offset < num)
1052 {
1053 byte b = chars[offset];
1054 if (b < 48 || b > 57)
1055 {
1056 break;
1057 }
1058 offset++;
1059 }
1060 int num10 = offset - num9;
1062 {
1063 return false;
1064 }
1066 if (num8 < 0)
1067 {
1068 return false;
1069 }
1070 for (int i = num10; i < 7; i++)
1071 {
1072 num8 *= 10;
1073 }
1074 }
1075 bool flag = false;
1076 int num11 = 0;
1077 int num12 = 0;
1078 if (offset < num)
1079 {
1080 byte b2 = chars[offset];
1081 switch (b2)
1082 {
1083 case 90:
1084 offset++;
1085 kind = DateTimeKind.Utc;
1086 break;
1087 case 43:
1088 case 45:
1089 offset++;
1090 if (offset + 5 > num || chars[offset + 2] != 58)
1091 {
1092 return false;
1093 }
1094 kind = DateTimeKind.Utc;
1095 flag = true;
1097 num12 = ToInt32D2(chars, offset + 3);
1098 if ((num11 | num12) < 0)
1099 {
1100 return false;
1101 }
1102 if (b2 == 43)
1103 {
1104 num11 = -num11;
1105 num12 = -num12;
1106 }
1107 offset += 5;
1108 break;
1109 }
1110 }
1111 if (offset < num)
1112 {
1113 return false;
1114 }
1116 try
1117 {
1118 dateTime = new DateTime(num2, num3, num4, num5, num6, num7, kind);
1119 }
1120 catch (ArgumentException)
1121 {
1122 return false;
1123 }
1124 if (num8 > 0)
1125 {
1126 dateTime = dateTime.AddTicks(num8);
1127 }
1128 if (flag)
1129 {
1130 try
1131 {
1133 dateTime = (((num11 < 0 || !(dateTime < DateTime.MaxValue - timeSpan)) && (num11 >= 0 || !(dateTime > DateTime.MinValue - timeSpan))) ? dateTime.ToLocalTime().Add(timeSpan) : dateTime.Add(timeSpan).ToLocalTime());
1134 }
1135 catch (ArgumentOutOfRangeException)
1136 {
1137 return false;
1138 }
1139 }
1140 result = dateTime;
1141 return true;
1142 }
static int ToInt32D4(byte[] chars, int offset, int count)
static int ToInt32D2(byte[] chars, int offset)
static int ToInt32D7(byte[] chars, int offset, int count)

References System.chars, System.count, System.Xml.DateTime, System.Xml.Dictionary, System.DateTime.MaxValue, System.offset, System.Xml.TimeSpan, System.Xml.XmlConverter.ToInt32D2(), System.Xml.XmlConverter.ToInt32D4(), and System.Xml.XmlConverter.ToInt32D7().

Referenced by System.Xml.XmlConverter.ToDateTime().