14 [__DynamicallyInvokable]
20 private CultureData m_cultureData;
22 [OptionalField(VersionAdded = 2)]
23 internal string m_name;
26 private string m_langName;
34 internal string amDesignator;
36 internal string pmDesignator;
38 [OptionalField(VersionAdded = 1)]
39 internal string dateSeparator;
41 [OptionalField(VersionAdded = 1)]
42 internal string generalShortTimePattern;
44 [OptionalField(VersionAdded = 1)]
45 internal string generalLongTimePattern;
47 [OptionalField(VersionAdded = 1)]
48 internal string timeSeparator;
50 internal string monthDayPattern;
52 [OptionalField(VersionAdded = 2)]
53 internal string dateTimeOffsetPattern;
55 internal const string rfc1123Pattern =
"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'";
57 internal const string sortableDateTimePattern =
"yyyy'-'MM'-'dd'T'HH':'mm':'ss";
59 internal const string universalSortableDateTimePattern =
"yyyy'-'MM'-'dd HH':'mm':'ss'Z'";
63 internal int firstDayOfWeek = -1;
65 internal int calendarWeekRule = -1;
67 [OptionalField(VersionAdded = 1)]
68 internal string fullDateTimePattern;
70 internal string[] abbreviatedDayNames;
72 [OptionalField(VersionAdded = 2)]
73 internal string[] m_superShortDayNames;
75 internal string[] dayNames;
77 internal string[] abbreviatedMonthNames;
79 internal string[] monthNames;
81 [OptionalField(VersionAdded = 2)]
82 internal string[] genitiveMonthNames;
84 [OptionalField(VersionAdded = 2)]
85 internal string[] m_genitiveAbbreviatedMonthNames;
87 [OptionalField(VersionAdded = 2)]
88 internal string[] leapYearMonthNames;
90 internal string longDatePattern;
92 internal string shortDatePattern;
94 internal string yearMonthPattern;
96 internal string longTimePattern;
98 internal string shortTimePattern;
100 [OptionalField(VersionAdded = 3)]
101 private string[] allYearMonthPatterns;
103 internal string[] allShortDatePatterns;
105 internal string[] allLongDatePatterns;
107 internal string[] allShortTimePatterns;
109 internal string[] allLongTimePatterns;
111 internal string[] m_eraNames;
113 internal string[] m_abbrevEraNames;
115 internal string[] m_abbrevEnglishEraNames;
117 internal int[] optionalCalendars;
119 private const int DEFAULT_ALL_DATETIMES_SIZE = 132;
121 internal bool m_isReadOnly;
123 [OptionalField(VersionAdded = 2)]
124 internal DateTimeFormatFlags formatFlags = DateTimeFormatFlags.NotInitialized;
126 internal static bool preferExistingTokens = InitPreferExistingTokens();
128 [OptionalField(VersionAdded = 1)]
129 private int CultureID;
131 [OptionalField(VersionAdded = 1)]
132 private bool m_useUserOverride;
134 [OptionalField(VersionAdded = 1)]
135 private bool bUseCalendarInfo;
137 [OptionalField(VersionAdded = 1)]
138 private int nDataItem;
140 [OptionalField(VersionAdded = 2)]
141 internal bool m_isDefaultCalendar;
143 [OptionalField(VersionAdded = 2)]
144 private static volatile Hashtable s_calendarNativeNames;
146 [OptionalField(VersionAdded = 1)]
147 internal string[] m_dateWords;
149 private static char[] MonthSpaces =
new char[2]
156 private string m_fullTimeSpanPositivePattern;
159 private string m_fullTimeSpanNegativePattern;
164 private TokenHashValue[] m_dtfiTokenHash;
166 private const int TOKEN_HASH_SIZE = 199;
168 private const int SECOND_PRIME = 197;
170 private const string dateSeparatorOrTimeZoneOffset =
"-";
172 private const string invariantDateSeparator =
"/";
174 private const string invariantTimeSeparator =
":";
176 internal const string IgnorablePeriod =
".";
178 internal const string IgnorableComma =
",";
180 internal const string CJKYearSuff =
"年";
182 internal const string CJKMonthSuff =
"月";
184 internal const string CJKDaySuff =
"日";
186 internal const string KoreanYearSuff =
"년";
188 internal const string KoreanMonthSuff =
"월";
190 internal const string KoreanDaySuff =
"일";
192 internal const string KoreanHourSuff =
"시";
194 internal const string KoreanMinuteSuff =
"분";
196 internal const string KoreanSecondSuff =
"초";
198 internal const string CJKHourSuff =
"時";
200 internal const string ChineseHourSuff =
"时";
202 internal const string CJKMinuteSuff =
"分";
204 internal const string CJKSecondSuff =
"秒";
206 internal const string LocalTimeMark =
"T";
208 internal const string KoreanLangName =
"ko";
210 internal const string JapaneseLangName =
"ja";
212 internal const string EnglishLangName =
"en";
218 private string CultureName
224 m_name = m_cultureData.CultureName;
234 if (m_cultureInfo ==
null)
238 return m_cultureInfo;
242 private string LanguageName
247 if (m_langName ==
null)
249 m_langName = m_cultureData.SISO639LANGNAME;
257 [__DynamicallyInvokable]
260 [__DynamicallyInvokable]
263 if (invariantInfo ==
null)
266 dateTimeFormatInfo.
Calendar.SetReadOnlyState(readOnly:
true);
267 dateTimeFormatInfo.m_isReadOnly =
true;
268 invariantInfo = dateTimeFormatInfo;
270 return invariantInfo;
276 [__DynamicallyInvokable]
279 [__DynamicallyInvokable]
283 if (!currentCulture.m_isInherited)
286 if (dateTimeInfo !=
null)
299 [__DynamicallyInvokable]
302 [__DynamicallyInvokable]
307 [__DynamicallyInvokable]
318 ClearTokenHashTable();
319 amDesignator = value;
328 [__DynamicallyInvokable]
331 [__DynamicallyInvokable]
336 [__DynamicallyInvokable]
347 if (value == calendar)
352 for (
int i = 0; i < OptionalCalendars.Length; i++)
354 if (OptionalCalendars[i] == value.ID)
356 if (calendar !=
null)
359 m_abbrevEraNames =
null;
360 m_abbrevEnglishEraNames =
null;
361 monthDayPattern =
null;
363 abbreviatedDayNames =
null;
364 m_superShortDayNames =
null;
366 abbreviatedMonthNames =
null;
367 genitiveMonthNames =
null;
368 m_genitiveAbbreviatedMonthNames =
null;
369 leapYearMonthNames =
null;
370 formatFlags = DateTimeFormatFlags.NotInitialized;
371 allShortDatePatterns =
null;
372 allLongDatePatterns =
null;
373 allYearMonthPatterns =
null;
374 dateTimeOffsetPattern =
null;
375 longDatePattern =
null;
376 shortDatePattern =
null;
377 yearMonthPattern =
null;
378 fullDateTimePattern =
null;
379 generalShortTimePattern =
null;
380 generalLongTimePattern =
null;
381 dateSeparator =
null;
382 ClearTokenHashTable();
385 InitializeOverridableProperties(m_cultureData, calendar.ID);
393 private int[] OptionalCalendars
397 if (optionalCalendars ==
null)
399 optionalCalendars = m_cultureData.CalendarIds;
401 return optionalCalendars;
405 internal string[] EraNames
409 if (m_eraNames ==
null)
411 m_eraNames = m_cultureData.EraNames(
Calendar.ID);
417 internal string[] AbbreviatedEraNames
421 if (m_abbrevEraNames ==
null)
423 m_abbrevEraNames = m_cultureData.AbbrevEraNames(
Calendar.ID);
425 return m_abbrevEraNames;
429 internal string[] AbbreviatedEnglishEraNames
433 if (m_abbrevEnglishEraNames ==
null)
435 m_abbrevEnglishEraNames = m_cultureData.AbbreviatedEnglishEraNames(
Calendar.ID);
437 return m_abbrevEnglishEraNames;
449 return dateSeparator;
461 ClearTokenHashTable();
462 dateSeparator = value;
470 [__DynamicallyInvokable]
473 [__DynamicallyInvokable]
478 [__DynamicallyInvokable]
487 firstDayOfWeek = (int)value;
498 [__DynamicallyInvokable]
501 [__DynamicallyInvokable]
506 [__DynamicallyInvokable]
515 calendarWeekRule = (int)value;
526 [__DynamicallyInvokable]
529 [__DynamicallyInvokable]
532 if (fullDateTimePattern ==
null)
536 return fullDateTimePattern;
538 [__DynamicallyInvokable]
549 fullDateTimePattern = value;
557 [__DynamicallyInvokable]
560 [__DynamicallyInvokable]
563 if (longDatePattern ==
null)
565 longDatePattern = UnclonedLongDatePatterns[0];
567 return longDatePattern;
569 [__DynamicallyInvokable]
580 longDatePattern = value;
581 ClearTokenHashTable();
582 fullDateTimePattern =
null;
590 [__DynamicallyInvokable]
593 [__DynamicallyInvokable]
596 if (longTimePattern ==
null)
598 longTimePattern = UnclonedLongTimePatterns[0];
600 return longTimePattern;
602 [__DynamicallyInvokable]
613 longTimePattern = value;
614 ClearTokenHashTable();
615 fullDateTimePattern =
null;
616 generalLongTimePattern =
null;
617 dateTimeOffsetPattern =
null;
625 [__DynamicallyInvokable]
628 [__DynamicallyInvokable]
631 if (monthDayPattern ==
null)
633 monthDayPattern = m_cultureData.MonthDay(
Calendar.ID);
635 return monthDayPattern;
637 [__DynamicallyInvokable]
648 monthDayPattern = value;
656 [__DynamicallyInvokable]
659 [__DynamicallyInvokable]
664 [__DynamicallyInvokable]
675 ClearTokenHashTable();
676 pmDesignator = value;
682 [__DynamicallyInvokable]
685 [__DynamicallyInvokable]
688 return "ddd, dd MMM yyyy HH':'mm':'ss 'GMT'";
696 [__DynamicallyInvokable]
699 [__DynamicallyInvokable]
702 if (shortDatePattern ==
null)
704 shortDatePattern = UnclonedShortDatePatterns[0];
706 return shortDatePattern;
708 [__DynamicallyInvokable]
719 shortDatePattern = value;
720 ClearTokenHashTable();
721 generalLongTimePattern =
null;
722 generalShortTimePattern =
null;
723 dateTimeOffsetPattern =
null;
731 [__DynamicallyInvokable]
734 [__DynamicallyInvokable]
737 if (shortTimePattern ==
null)
739 shortTimePattern = UnclonedShortTimePatterns[0];
741 return shortTimePattern;
743 [__DynamicallyInvokable]
754 shortTimePattern = value;
755 ClearTokenHashTable();
756 generalShortTimePattern =
null;
762 [__DynamicallyInvokable]
765 [__DynamicallyInvokable]
768 return "yyyy'-'MM'-'dd'T'HH':'mm':'ss";
772 internal string GeneralShortTimePattern
776 if (generalShortTimePattern ==
null)
780 return generalShortTimePattern;
784 internal string GeneralLongTimePattern
788 if (generalLongTimePattern ==
null)
792 return generalLongTimePattern;
796 internal string DateTimeOffsetPattern
800 if (dateTimeOffsetPattern ==
null)
835 dateTimeOffsetPattern +=
" zzz";
838 return dateTimeOffsetPattern;
846 public string TimeSeparator
850 return timeSeparator;
856 throw new InvalidOperationException(Environment.GetResourceString(
"InvalidOperation_ReadOnly"));
860 throw new ArgumentNullException(
"value", Environment.GetResourceString(
"ArgumentNull_String"));
862 ClearTokenHashTable();
863 timeSeparator = value;
869 [__DynamicallyInvokable]
870 public string UniversalSortableDateTimePattern
872 [__DynamicallyInvokable]
875 return "yyyy'-'MM'-'dd HH':'mm':'ss'Z'";
883 [__DynamicallyInvokable]
884 public string YearMonthPattern
886 [__DynamicallyInvokable]
889 if (yearMonthPattern ==
null)
891 yearMonthPattern = UnclonedYearMonthPatterns[0];
893 return yearMonthPattern;
895 [__DynamicallyInvokable]
900 throw new InvalidOperationException(Environment.GetResourceString(
"InvalidOperation_ReadOnly"));
904 throw new ArgumentNullException(
"value", Environment.GetResourceString(
"ArgumentNull_String"));
906 yearMonthPattern = value;
907 ClearTokenHashTable();
916 [__DynamicallyInvokable]
917 public string[] AbbreviatedDayNames
919 [__DynamicallyInvokable]
922 return (
string[])internalGetAbbreviatedDayOfWeekNames().Clone();
924 [__DynamicallyInvokable]
929 throw new InvalidOperationException(Environment.GetResourceString(
"InvalidOperation_ReadOnly"));
933 throw new ArgumentNullException(
"value", Environment.GetResourceString(
"ArgumentNull_Array"));
935 if (value.Length != 7)
937 throw new ArgumentException(Environment.GetResourceString(
"Argument_InvalidArrayLength", 7),
"value");
939 CheckNullValue(value, value.Length);
940 ClearTokenHashTable();
941 abbreviatedDayNames = value;
951 [__DynamicallyInvokable]
952 public string[] ShortestDayNames
954 [__DynamicallyInvokable]
957 return (
string[])internalGetSuperShortDayNames().Clone();
959 [__DynamicallyInvokable]
964 throw new InvalidOperationException(Environment.GetResourceString(
"InvalidOperation_ReadOnly"));
968 throw new ArgumentNullException(
"value", Environment.GetResourceString(
"ArgumentNull_Array"));
970 if (value.Length != 7)
972 throw new ArgumentException(Environment.GetResourceString(
"Argument_InvalidArrayLength", 7),
"value");
974 CheckNullValue(value, value.Length);
975 m_superShortDayNames = value;
984 [__DynamicallyInvokable]
985 public string[] DayNames
987 [__DynamicallyInvokable]
990 return (
string[])internalGetDayOfWeekNames().Clone();
992 [__DynamicallyInvokable]
997 throw new InvalidOperationException(Environment.GetResourceString(
"InvalidOperation_ReadOnly"));
1001 throw new ArgumentNullException(
"value", Environment.GetResourceString(
"ArgumentNull_Array"));
1003 if (value.Length != 7)
1005 throw new ArgumentException(Environment.GetResourceString(
"Argument_InvalidArrayLength", 7),
"value");
1007 CheckNullValue(value, value.Length);
1008 ClearTokenHashTable();
1018 [__DynamicallyInvokable]
1019 public string[] AbbreviatedMonthNames
1021 [__DynamicallyInvokable]
1024 return (
string[])internalGetAbbreviatedMonthNames().Clone();
1026 [__DynamicallyInvokable]
1031 throw new InvalidOperationException(Environment.GetResourceString(
"InvalidOperation_ReadOnly"));
1035 throw new ArgumentNullException(
"value", Environment.GetResourceString(
"ArgumentNull_Array"));
1037 if (value.Length != 13)
1039 throw new ArgumentException(Environment.GetResourceString(
"Argument_InvalidArrayLength", 13),
"value");
1041 CheckNullValue(value, value.Length - 1);
1042 ClearTokenHashTable();
1043 abbreviatedMonthNames = value;
1052 [__DynamicallyInvokable]
1053 public string[] MonthNames
1055 [__DynamicallyInvokable]
1058 return (
string[])internalGetMonthNames().Clone();
1060 [__DynamicallyInvokable]
1065 throw new InvalidOperationException(Environment.GetResourceString(
"InvalidOperation_ReadOnly"));
1069 throw new ArgumentNullException(
"value", Environment.GetResourceString(
"ArgumentNull_Array"));
1071 if (value.Length != 13)
1073 throw new ArgumentException(Environment.GetResourceString(
"Argument_InvalidArrayLength", 13),
"value");
1075 CheckNullValue(value, value.Length - 1);
1077 ClearTokenHashTable();
1081 internal bool HasSpacesInMonthNames => (FormatFlags & DateTimeFormatFlags.UseSpacesInMonthNames) != DateTimeFormatFlags.None;
1083 internal bool HasSpacesInDayNames => (FormatFlags & DateTimeFormatFlags.UseSpacesInDayNames) != DateTimeFormatFlags.None;
1085 private string[] AllYearMonthPatterns => GetMergedPatterns(UnclonedYearMonthPatterns, YearMonthPattern);
1087 private string[] AllShortDatePatterns => GetMergedPatterns(UnclonedShortDatePatterns,
ShortDatePattern);
1089 private string[] AllShortTimePatterns => GetMergedPatterns(UnclonedShortTimePatterns,
ShortTimePattern);
1091 private string[] AllLongDatePatterns => GetMergedPatterns(UnclonedLongDatePatterns,
LongDatePattern);
1093 private string[] AllLongTimePatterns => GetMergedPatterns(UnclonedLongTimePatterns,
LongTimePattern);
1095 private string[] UnclonedYearMonthPatterns
1099 if (allYearMonthPatterns ==
null)
1101 allYearMonthPatterns = m_cultureData.YearMonths(
Calendar.ID);
1103 return allYearMonthPatterns;
1107 private string[] UnclonedShortDatePatterns
1111 if (allShortDatePatterns ==
null)
1113 allShortDatePatterns = m_cultureData.ShortDates(
Calendar.ID);
1115 return allShortDatePatterns;
1119 private string[] UnclonedLongDatePatterns
1123 if (allLongDatePatterns ==
null)
1125 allLongDatePatterns = m_cultureData.LongDates(
Calendar.ID);
1127 return allLongDatePatterns;
1131 private string[] UnclonedShortTimePatterns
1135 if (allShortTimePatterns ==
null)
1137 allShortTimePatterns = m_cultureData.ShortTimes;
1139 return allShortTimePatterns;
1143 private string[] UnclonedLongTimePatterns
1147 if (allLongTimePatterns ==
null)
1149 allLongTimePatterns = m_cultureData.LongTimes;
1151 return allLongTimePatterns;
1158 [__DynamicallyInvokable]
1159 public bool IsReadOnly
1161 [__DynamicallyInvokable]
1164 return m_isReadOnly;
1171 public string NativeCalendarName
1175 return m_cultureData.CalendarName(
Calendar.ID);
1185 [__DynamicallyInvokable]
1186 public string[] AbbreviatedMonthGenitiveNames
1188 [__DynamicallyInvokable]
1191 return (
string[])internalGetGenitiveMonthNames(abbreviated:
true).Clone();
1193 [__DynamicallyInvokable]
1198 throw new InvalidOperationException(Environment.GetResourceString(
"InvalidOperation_ReadOnly"));
1202 throw new ArgumentNullException(
"value", Environment.GetResourceString(
"ArgumentNull_Array"));
1204 if (value.Length != 13)
1206 throw new ArgumentException(Environment.GetResourceString(
"Argument_InvalidArrayLength", 13),
"value");
1208 CheckNullValue(value, value.Length - 1);
1209 ClearTokenHashTable();
1210 m_genitiveAbbreviatedMonthNames = value;
1220 [__DynamicallyInvokable]
1221 public string[] MonthGenitiveNames
1223 [__DynamicallyInvokable]
1226 return (
string[])internalGetGenitiveMonthNames(abbreviated:
false).Clone();
1228 [__DynamicallyInvokable]
1233 throw new InvalidOperationException(Environment.GetResourceString(
"InvalidOperation_ReadOnly"));
1237 throw new ArgumentNullException(
"value", Environment.GetResourceString(
"ArgumentNull_Array"));
1239 if (value.Length != 13)
1241 throw new ArgumentException(Environment.GetResourceString(
"Argument_InvalidArrayLength", 13),
"value");
1243 CheckNullValue(value, value.Length - 1);
1244 genitiveMonthNames = value;
1245 ClearTokenHashTable();
1249 internal string FullTimeSpanPositivePattern
1253 if (m_fullTimeSpanPositivePattern ==
null)
1255 CultureData cultureData = (!m_cultureData.UseUserOverride) ? m_cultureData : CultureData.GetCultureData(m_cultureData.CultureName, useUserOverride:
false);
1256 string numberDecimalSeparator =
new NumberFormatInfo(cultureData).NumberDecimalSeparator;
1257 m_fullTimeSpanPositivePattern =
"d':'h':'mm':'ss'" + numberDecimalSeparator +
"'FFFFFFF";
1259 return m_fullTimeSpanPositivePattern;
1263 internal string FullTimeSpanNegativePattern
1267 if (m_fullTimeSpanNegativePattern ==
null)
1269 m_fullTimeSpanNegativePattern =
"'-'" + FullTimeSpanPositivePattern;
1271 return m_fullTimeSpanNegativePattern;
1275 internal CompareInfo CompareInfo
1279 if (m_compareInfo ==
null)
1281 m_compareInfo = CompareInfo.
GetCompareInfo(m_cultureData.SCOMPAREINFO);
1283 return m_compareInfo;
1287 internal DateTimeFormatFlags FormatFlags
1291 if (formatFlags == DateTimeFormatFlags.NotInitialized)
1293 formatFlags = DateTimeFormatFlags.None;
1294 formatFlags |= (DateTimeFormatFlags)DateTimeFormatInfoScanner.GetFormatFlagGenitiveMonth(MonthNames, internalGetGenitiveMonthNames(abbreviated:
false), AbbreviatedMonthNames, internalGetGenitiveMonthNames(abbreviated:
true));
1295 formatFlags |= (DateTimeFormatFlags)DateTimeFormatInfoScanner.GetFormatFlagUseSpaceInMonthNames(MonthNames, internalGetGenitiveMonthNames(abbreviated:
false), AbbreviatedMonthNames, internalGetGenitiveMonthNames(abbreviated:
true));
1296 formatFlags |= (DateTimeFormatFlags)DateTimeFormatInfoScanner.GetFormatFlagUseSpaceInDayNames(DayNames, AbbreviatedDayNames);
1297 formatFlags |= (DateTimeFormatFlags)DateTimeFormatInfoScanner.GetFormatFlagUseHebrewCalendar(
Calendar.ID);
1303 internal bool HasForceTwoDigitYears
1307 int iD = calendar.ID;
1308 if (iD == 3 || iD == 4)
1316 internal bool HasYearMonthAdjustment => (FormatFlags & DateTimeFormatFlags.UseHebrewRule) != DateTimeFormatFlags.None;
1318 [SecuritySafeCritical]
1319 private static bool InitPreferExistingTokens()
1325 private string[] internalGetAbbreviatedDayOfWeekNames()
1327 if (abbreviatedDayNames ==
null)
1329 abbreviatedDayNames = m_cultureData.AbbreviatedDayNames(
Calendar.ID);
1331 return abbreviatedDayNames;
1334 private string[] internalGetSuperShortDayNames()
1336 if (m_superShortDayNames ==
null)
1338 m_superShortDayNames = m_cultureData.SuperShortDayNames(
Calendar.ID);
1340 return m_superShortDayNames;
1343 private string[] internalGetDayOfWeekNames()
1345 if (dayNames ==
null)
1347 dayNames = m_cultureData.DayNames(
Calendar.ID);
1352 private string[] internalGetAbbreviatedMonthNames()
1354 if (abbreviatedMonthNames ==
null)
1356 abbreviatedMonthNames = m_cultureData.AbbreviatedMonthNames(
Calendar.ID);
1358 return abbreviatedMonthNames;
1361 private string[] internalGetMonthNames()
1363 if (monthNames ==
null)
1365 monthNames = m_cultureData.MonthNames(
Calendar.ID);
1371 [__DynamicallyInvokable]
1372 public DateTimeFormatInfo()
1373 : this(CultureInfo.
InvariantCulture.m_cultureData, GregorianCalendar.GetDefaultInstance())
1377 internal DateTimeFormatInfo(CultureData cultureData,
Calendar cal)
1379 m_cultureData = cultureData;
1383 [SecuritySafeCritical]
1384 private void InitializeOverridableProperties(CultureData cultureData,
int calendarID)
1386 if (firstDayOfWeek == -1)
1388 firstDayOfWeek = cultureData.IFIRSTDAYOFWEEK;
1390 if (calendarWeekRule == -1)
1392 calendarWeekRule = cultureData.IFIRSTWEEKOFYEAR;
1394 if (amDesignator ==
null)
1396 amDesignator = cultureData.SAM1159;
1398 if (pmDesignator ==
null)
1400 pmDesignator = cultureData.SPM2359;
1402 if (timeSeparator ==
null)
1404 timeSeparator = cultureData.TimeSeparator;
1406 if (dateSeparator ==
null)
1408 dateSeparator = cultureData.DateSeparator(calendarID);
1410 allLongTimePatterns = m_cultureData.LongTimes;
1411 allShortTimePatterns = m_cultureData.ShortTimes;
1412 allLongDatePatterns = cultureData.LongDates(calendarID);
1413 allShortDatePatterns = cultureData.ShortDates(calendarID);
1414 allYearMonthPatterns = cultureData.YearMonths(calendarID);
1422 m_cultureData = CultureData.GetCultureData(m_name, m_useUserOverride);
1423 if (m_cultureData ==
null)
1425 throw new CultureNotFoundException(
"m_name", m_name, Environment.GetResourceString(
"Argument_CultureNotSupported"));
1430 m_cultureData = CultureData.GetCultureData(CultureID, m_useUserOverride);
1432 if (calendar ==
null)
1434 calendar = (
Calendar)GregorianCalendar.GetDefaultInstance().
Clone();
1435 calendar.SetReadOnlyState(m_isReadOnly);
1439 CultureInfo.CheckDomainSafetyObject(calendar,
this);
1441 InitializeOverridableProperties(m_cultureData, calendar.ID);
1442 bool isReadOnly = m_isReadOnly;
1443 m_isReadOnly =
false;
1444 if (longDatePattern !=
null)
1448 if (shortDatePattern !=
null)
1452 if (yearMonthPattern !=
null)
1454 YearMonthPattern = yearMonthPattern;
1456 if (longTimePattern !=
null)
1460 if (shortTimePattern !=
null)
1464 m_isReadOnly = isReadOnly;
1470 CultureID = m_cultureData.ILANGUAGE;
1471 m_useUserOverride = m_cultureData.UseUserOverride;
1472 m_name = CultureName;
1473 if (s_calendarNativeNames ==
null)
1475 s_calendarNativeNames =
new Hashtable();
1481 obj = YearMonthPattern;
1482 obj = AllLongTimePatterns;
1483 obj = AllLongDatePatterns;
1484 obj = AllShortTimePatterns;
1485 obj = AllShortDatePatterns;
1486 obj = AllYearMonthPatterns;
1493 [__DynamicallyInvokable]
1494 public static DateTimeFormatInfo GetInstance(IFormatProvider provider)
1496 CultureInfo cultureInfo = provider as CultureInfo;
1497 if (cultureInfo !=
null && !cultureInfo.m_isInherited)
1499 return cultureInfo.DateTimeFormat;
1501 DateTimeFormatInfo dateTimeFormatInfo = provider as DateTimeFormatInfo;
1502 if (dateTimeFormatInfo !=
null)
1504 return dateTimeFormatInfo;
1506 if (provider !=
null)
1508 dateTimeFormatInfo = (provider.GetFormat(typeof(DateTimeFormatInfo)) as DateTimeFormatInfo);
1509 if (dateTimeFormatInfo !=
null)
1511 return dateTimeFormatInfo;
1520 [__DynamicallyInvokable]
1521 public object GetFormat(Type formatType)
1523 if (!(formatType == typeof(DateTimeFormatInfo)))
1532 [__DynamicallyInvokable]
1533 public object Clone()
1535 DateTimeFormatInfo dateTimeFormatInfo = (DateTimeFormatInfo)MemberwiseClone();
1537 dateTimeFormatInfo.m_isReadOnly =
false;
1538 return dateTimeFormatInfo;
1546 [__DynamicallyInvokable]
1547 public int GetEra(
string eraName)
1549 if (eraName ==
null)
1551 throw new ArgumentNullException(
"eraName", Environment.GetResourceString(
"ArgumentNull_String"));
1553 if (eraName.Length == 0)
1557 for (
int i = 0; i < EraNames.Length; i++)
1559 if (m_eraNames[i].Length > 0 &&
string.Compare(eraName, m_eraNames[i], Culture,
CompareOptions.IgnoreCase) == 0)
1564 for (
int j = 0; j < AbbreviatedEraNames.Length; j++)
1566 if (
string.Compare(eraName, m_abbrevEraNames[j], Culture,
CompareOptions.IgnoreCase) == 0)
1571 for (
int k = 0; k < AbbreviatedEnglishEraNames.Length; k++)
1573 if (
string.Compare(eraName, m_abbrevEnglishEraNames[k],
StringComparison.InvariantCultureIgnoreCase) == 0)
1586 [__DynamicallyInvokable]
1587 public string GetEraName(
int era)
1593 if (--era < EraNames.Length && era >= 0)
1595 return m_eraNames[era];
1597 throw new ArgumentOutOfRangeException(
"era", Environment.GetResourceString(
"ArgumentOutOfRange_InvalidEraValue"));
1605 [__DynamicallyInvokable]
1606 public string GetAbbreviatedEraName(
int era)
1608 if (AbbreviatedEraNames.Length == 0)
1610 return GetEraName(era);
1616 if (--era < m_abbrevEraNames.Length && era >= 0)
1618 return m_abbrevEraNames[era];
1620 throw new ArgumentOutOfRangeException(
"era", Environment.GetResourceString(
"ArgumentOutOfRange_InvalidEraValue"));
1623 private static void CheckNullValue(
string[] values,
int length)
1630 if (values[num] ==
null)
1639 throw new ArgumentNullException(
"value", Environment.GetResourceString(
"ArgumentNull_ArrayValue"));
1642 internal string internalGetMonthName(
int month, MonthNameStyles style,
bool abbreviated)
1644 string[] array =
null;
1647 case MonthNameStyles.Genitive:
1648 array = internalGetGenitiveMonthNames(abbreviated);
1650 case MonthNameStyles.LeapYear:
1651 array = internalGetLeapYearMonthNames();
1654 array = (abbreviated ? internalGetAbbreviatedMonthNames() : internalGetMonthNames());
1657 if (month < 1 || month > array.Length)
1659 throw new ArgumentOutOfRangeException(
"month", Environment.GetResourceString(
"ArgumentOutOfRange_Range", 1, array.Length));
1661 return array[month - 1];
1664 private string[] internalGetGenitiveMonthNames(
bool abbreviated)
1668 if (m_genitiveAbbreviatedMonthNames ==
null)
1670 m_genitiveAbbreviatedMonthNames = m_cultureData.AbbreviatedGenitiveMonthNames(
Calendar.ID);
1672 return m_genitiveAbbreviatedMonthNames;
1674 if (genitiveMonthNames ==
null)
1676 genitiveMonthNames = m_cultureData.GenitiveMonthNames(
Calendar.ID);
1678 return genitiveMonthNames;
1681 internal string[] internalGetLeapYearMonthNames()
1683 if (leapYearMonthNames ==
null)
1685 leapYearMonthNames = m_cultureData.LeapYearMonthNames(
Calendar.ID);
1687 return leapYearMonthNames;
1695 [__DynamicallyInvokable]
1696 public string GetAbbreviatedDayName(
DayOfWeek dayofweek)
1698 if (dayofweek < DayOfWeek.Sunday || dayofweek >
DayOfWeek.Saturday)
1700 throw new ArgumentOutOfRangeException(
"dayofweek", Environment.GetResourceString(
"ArgumentOutOfRange_Range",
DayOfWeek.Sunday,
DayOfWeek.Saturday));
1702 return internalGetAbbreviatedDayOfWeekNames()[(int)dayofweek];
1711 public string GetShortestDayName(
DayOfWeek dayOfWeek)
1713 if (dayOfWeek < DayOfWeek.Sunday || dayOfWeek >
DayOfWeek.Saturday)
1715 throw new ArgumentOutOfRangeException(
"dayOfWeek", Environment.GetResourceString(
"ArgumentOutOfRange_Range",
DayOfWeek.Sunday,
DayOfWeek.Saturday));
1717 return internalGetSuperShortDayNames()[(int)dayOfWeek];
1720 private static string[] GetCombinedPatterns(
string[] patterns1,
string[] patterns2,
string connectString)
1722 string[] array =
new string[patterns1.Length * patterns2.Length];
1724 for (
int i = 0; i < patterns1.Length; i++)
1726 for (
int j = 0; j < patterns2.Length; j++)
1728 array[num++] = patterns1[i] + connectString + patterns2[j];
1736 public string[] GetAllDateTimePatterns()
1739 for (
int i = 0; i < DateTimeFormat.allStandardFormats.Length; i++)
1741 string[] allDateTimePatterns = GetAllDateTimePatterns(DateTimeFormat.allStandardFormats[i]);
1742 for (
int j = 0; j < allDateTimePatterns.Length; j++)
1744 list.Add(allDateTimePatterns[j]);
1747 return list.ToArray();
1755 public string[] GetAllDateTimePatterns(
char format)
1757 string[] array =
null;
1761 return AllShortDatePatterns;
1763 return AllLongDatePatterns;
1765 return GetCombinedPatterns(AllLongDatePatterns, AllShortTimePatterns,
" ");
1768 return GetCombinedPatterns(AllLongDatePatterns, AllLongTimePatterns,
" ");
1770 return GetCombinedPatterns(AllShortDatePatterns, AllShortTimePatterns,
" ");
1772 return GetCombinedPatterns(AllShortDatePatterns, AllLongTimePatterns,
" ");
1775 return new string[1]
1781 return new string[1]
1783 "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK" 1787 return new string[1]
1789 "ddd, dd MMM yyyy HH':'mm':'ss 'GMT'" 1792 return new string[1]
1794 "yyyy'-'MM'-'dd'T'HH':'mm':'ss" 1797 return AllShortTimePatterns;
1799 return AllLongTimePatterns;
1801 return new string[1]
1803 UniversalSortableDateTimePattern
1807 return AllYearMonthPatterns;
1809 throw new ArgumentException(Environment.GetResourceString(
"Format_BadFormatSpecifier"),
"format");
1818 [__DynamicallyInvokable]
1819 public string GetDayName(
DayOfWeek dayofweek)
1821 if (dayofweek < DayOfWeek.Sunday || dayofweek >
DayOfWeek.Saturday)
1823 throw new ArgumentOutOfRangeException(
"dayofweek", Environment.GetResourceString(
"ArgumentOutOfRange_Range",
DayOfWeek.Sunday,
DayOfWeek.Saturday));
1825 return internalGetDayOfWeekNames()[(int)dayofweek];
1833 [__DynamicallyInvokable]
1834 public string GetAbbreviatedMonthName(
int month)
1836 if (month < 1 || month > 13)
1838 throw new ArgumentOutOfRangeException(
"month", Environment.GetResourceString(
"ArgumentOutOfRange_Range", 1, 13));
1840 return internalGetAbbreviatedMonthNames()[month - 1];
1848 [__DynamicallyInvokable]
1849 public string GetMonthName(
int month)
1851 if (month < 1 || month > 13)
1853 throw new ArgumentOutOfRangeException(
"month", Environment.GetResourceString(
"ArgumentOutOfRange_Range", 1, 13));
1855 return internalGetMonthNames()[month - 1];
1858 private static string[] GetMergedPatterns(
string[] patterns,
string defaultPattern)
1860 if (defaultPattern == patterns[0])
1862 return (
string[])patterns.Clone();
1865 for (i = 0; i < patterns.Length && !(defaultPattern == patterns[i]); i++)
1869 if (i < patterns.Length)
1871 array = (
string[])patterns.Clone();
1872 array[i] = array[0];
1876 array =
new string[patterns.Length + 1];
1877 Array.Copy(patterns, 0, array, 1, patterns.Length);
1879 array[0] = defaultPattern;
1888 [__DynamicallyInvokable]
1889 public static DateTimeFormatInfo
ReadOnly(DateTimeFormatInfo dtfi)
1893 throw new ArgumentNullException(
"dtfi", Environment.GetResourceString(
"ArgumentNull_Obj"));
1895 if (dtfi.IsReadOnly)
1899 DateTimeFormatInfo dateTimeFormatInfo = (DateTimeFormatInfo)dtfi.MemberwiseClone();
1901 dateTimeFormatInfo.m_isReadOnly =
true;
1902 return dateTimeFormatInfo;
1915 public void SetAllDateTimePatterns(
string[] patterns,
char format)
1919 throw new InvalidOperationException(Environment.GetResourceString(
"InvalidOperation_ReadOnly"));
1921 if (patterns ==
null)
1923 throw new ArgumentNullException(
"patterns", Environment.GetResourceString(
"ArgumentNull_Array"));
1925 if (patterns.Length == 0)
1927 throw new ArgumentException(Environment.GetResourceString(
"Arg_ArrayZeroError"),
"patterns");
1929 for (
int i = 0; i < patterns.Length; i++)
1931 if (patterns[i] ==
null)
1933 throw new ArgumentNullException(Environment.GetResourceString(
"ArgumentNull_ArrayValue"));
1939 allShortDatePatterns = patterns;
1940 shortDatePattern = allShortDatePatterns[0];
1943 allLongDatePatterns = patterns;
1944 longDatePattern = allLongDatePatterns[0];
1947 allShortTimePatterns = patterns;
1948 shortTimePattern = allShortTimePatterns[0];
1951 allLongTimePatterns = patterns;
1952 longTimePattern = allLongTimePatterns[0];
1956 allYearMonthPatterns = patterns;
1957 yearMonthPattern = allYearMonthPatterns[0];
1960 throw new ArgumentException(Environment.GetResourceString(
"Format_BadFormatSpecifier"),
"format");
1962 ClearTokenHashTable();
1965 internal static void ValidateStyles(
DateTimeStyles style,
string parameterName)
1969 throw new ArgumentException(Environment.GetResourceString(
"Argument_InvalidDateTimeStyles"), parameterName);
1973 throw new ArgumentException(Environment.GetResourceString(
"Argument_ConflictingDateTimeStyles"), parameterName);
1977 throw new ArgumentException(Environment.GetResourceString(
"Argument_ConflictingDateTimeRoundtripStyles"), parameterName);
1981 internal bool YearMonthAdjustment(ref
int year, ref
int month,
bool parsedMonthName)
1983 if ((FormatFlags & DateTimeFormatFlags.UseHebrewRule) != 0)
1999 else if (month == 7)
2008 internal static DateTimeFormatInfo GetJapaneseCalendarDTFI()
2010 DateTimeFormatInfo dateTimeFormat = s_jajpDTFI;
2011 if (dateTimeFormat ==
null)
2013 dateTimeFormat =
new CultureInfo(
"ja-JP", useUserOverride:
false).DateTimeFormat;
2014 dateTimeFormat.
Calendar = JapaneseCalendar.GetDefaultInstance();
2015 s_jajpDTFI = dateTimeFormat;
2017 return dateTimeFormat;
2020 internal static DateTimeFormatInfo GetTaiwanCalendarDTFI()
2022 DateTimeFormatInfo dateTimeFormat = s_zhtwDTFI;
2023 if (dateTimeFormat ==
null)
2025 dateTimeFormat =
new CultureInfo(
"zh-TW", useUserOverride:
false).DateTimeFormat;
2026 dateTimeFormat.
Calendar = TaiwanCalendar.GetDefaultInstance();
2027 s_zhtwDTFI = dateTimeFormat;
2029 return dateTimeFormat;
2032 private void ClearTokenHashTable()
2034 m_dtfiTokenHash =
null;
2035 formatFlags = DateTimeFormatFlags.NotInitialized;
2039 internal TokenHashValue[] CreateTokenHashTable()
2041 TokenHashValue[] array = m_dtfiTokenHash;
2044 array =
new TokenHashValue[199];
2045 bool flag = LanguageName.Equals(
"ko");
2046 string b = TimeSeparator.Trim();
2049 InsertHash(array,
",", TokenType.IgnorableSymbol, 0);
2053 InsertHash(array,
".", TokenType.IgnorableSymbol, 0);
2055 if (
"시" != b &&
"時" != b &&
"时" != b)
2057 InsertHash(array, TimeSeparator, TokenType.SEP_Time, 0);
2061 if (LanguageName.Equals(
"sq"))
2063 InsertHash(array,
"." +
AMDesignator, (TokenType)1027, 0);
2064 InsertHash(array,
"." +
PMDesignator, (TokenType)1284, 1);
2066 InsertHash(array,
"年", TokenType.SEP_YearSuff, 0);
2067 InsertHash(array,
"년", TokenType.SEP_YearSuff, 0);
2068 InsertHash(array,
"月", TokenType.SEP_MonthSuff, 0);
2069 InsertHash(array,
"월", TokenType.SEP_MonthSuff, 0);
2070 InsertHash(array,
"日", TokenType.SEP_DaySuff, 0);
2071 InsertHash(array,
"일", TokenType.SEP_DaySuff, 0);
2072 InsertHash(array,
"時", TokenType.SEP_HourSuff, 0);
2073 InsertHash(array,
"时", TokenType.SEP_HourSuff, 0);
2074 InsertHash(array,
"分", TokenType.SEP_MinuteSuff, 0);
2075 InsertHash(array,
"秒", TokenType.SEP_SecondSuff, 0);
2078 InsertHash(array,
"시", TokenType.SEP_HourSuff, 0);
2079 InsertHash(array,
"분", TokenType.SEP_MinuteSuff, 0);
2080 InsertHash(array,
"초", TokenType.SEP_SecondSuff, 0);
2082 if (LanguageName.Equals(
"ky"))
2084 InsertHash(array,
"-", TokenType.IgnorableSymbol, 0);
2088 InsertHash(array,
"-", TokenType.SEP_DateOrOffset, 0);
2090 string[] array2 =
null;
2091 DateTimeFormatInfoScanner dateTimeFormatInfoScanner =
null;
2092 dateTimeFormatInfoScanner =
new DateTimeFormatInfoScanner();
2093 array2 = (m_dateWords = dateTimeFormatInfoScanner.GetDateWordsOfDTFI(
this));
2094 DateTimeFormatFlags dateTimeFormatFlags = FormatFlags;
2099 for (
int i = 0; i < array2.Length; i++)
2101 switch (array2[i][0])
2104 text = array2[i].Substring(1);
2105 AddMonthNames(array, text);
2109 string text2 = array2[i].Substring(1);
2110 InsertHash(array, text2, TokenType.IgnorableSymbol, 0);
2118 InsertHash(array, array2[i], TokenType.DateWordToken, 0);
2119 if (LanguageName.Equals(
"eu"))
2121 InsertHash(array,
"." + array2[i], TokenType.DateWordToken, 0);
2131 AddMonthNames(array,
null);
2132 for (
int j = 1; j <= 13; j++)
2134 InsertHash(array, GetAbbreviatedMonthName(j), TokenType.MonthToken, j);
2136 if ((FormatFlags & DateTimeFormatFlags.UseGenitiveMonth) != 0)
2138 for (
int k = 1; k <= 13; k++)
2140 string str = internalGetMonthName(k, MonthNameStyles.Genitive, abbreviated:
false);
2141 InsertHash(array, str, TokenType.MonthToken, k);
2144 if ((FormatFlags & DateTimeFormatFlags.UseLeapYearMonth) != 0)
2146 for (
int l = 1; l <= 13; l++)
2148 string str2 = internalGetMonthName(l, MonthNameStyles.LeapYear, abbreviated:
false);
2149 InsertHash(array, str2, TokenType.MonthToken, l);
2152 for (
int m = 0; m < 7; m++)
2154 string dayName = GetDayName((
DayOfWeek)m);
2155 InsertHash(array, dayName, TokenType.DayOfWeekToken, m);
2156 dayName = GetAbbreviatedDayName((
DayOfWeek)m);
2157 InsertHash(array, dayName, TokenType.DayOfWeekToken, m);
2159 int[] eras = calendar.
Eras;
2160 for (
int n = 1; n <= eras.Length; n++)
2162 InsertHash(array, GetEraName(n), TokenType.EraToken, n);
2163 InsertHash(array, GetAbbreviatedEraName(n), TokenType.EraToken, n);
2165 if (LanguageName.Equals(
"ja"))
2167 for (
int num = 0; num < 7; num++)
2169 string str3 =
"(" + GetAbbreviatedDayName((
DayOfWeek)num) +
")";
2170 InsertHash(array, str3, TokenType.DayOfWeekToken, num);
2172 if (
Calendar.GetType() != typeof(JapaneseCalendar))
2174 DateTimeFormatInfo japaneseCalendarDTFI = GetJapaneseCalendarDTFI();
2175 for (
int num2 = 1; num2 <= japaneseCalendarDTFI.Calendar.Eras.Length; num2++)
2177 InsertHash(array, japaneseCalendarDTFI.GetEraName(num2), TokenType.JapaneseEraToken, num2);
2178 InsertHash(array, japaneseCalendarDTFI.GetAbbreviatedEraName(num2), TokenType.JapaneseEraToken, num2);
2179 InsertHash(array, japaneseCalendarDTFI.AbbreviatedEnglishEraNames[num2 - 1], TokenType.JapaneseEraToken, num2);
2183 else if (CultureName.Equals(
"zh-TW"))
2185 DateTimeFormatInfo taiwanCalendarDTFI = GetTaiwanCalendarDTFI();
2186 for (
int num3 = 1; num3 <= taiwanCalendarDTFI.Calendar.Eras.Length; num3++)
2188 if (taiwanCalendarDTFI.GetEraName(num3).Length > 0)
2190 InsertHash(array, taiwanCalendarDTFI.GetEraName(num3), TokenType.TEraToken, num3);
2196 for (
int num4 = 1; num4 <= 12; num4++)
2199 InsertHash(array, monthName, TokenType.MonthToken, num4);
2201 InsertHash(array, monthName, TokenType.MonthToken, num4);
2203 for (
int num5 = 0; num5 < 7; num5++)
2206 InsertHash(array, dayName2, TokenType.DayOfWeekToken, num5);
2208 InsertHash(array, dayName2, TokenType.DayOfWeekToken, num5);
2210 for (
int num6 = 0; num6 < AbbreviatedEnglishEraNames.Length; num6++)
2212 InsertHash(array, AbbreviatedEnglishEraNames[num6], TokenType.EraToken, num6 + 1);
2214 InsertHash(array,
"T", TokenType.SEP_LocalTimeMark, 0);
2215 InsertHash(array,
"GMT", TokenType.TimeZoneToken, 0);
2216 InsertHash(array,
"Z", TokenType.TimeZoneToken, 0);
2217 InsertHash(array,
"/", TokenType.SEP_Date, 0);
2218 InsertHash(array,
":", TokenType.SEP_Time, 0);
2219 m_dtfiTokenHash = array;
2224 private void AddMonthNames(TokenHashValue[] temp,
string monthPostfix)
2226 for (
int i = 1; i <= 13; i++)
2228 string monthName = GetMonthName(i);
2229 if (monthName.Length > 0)
2231 if (monthPostfix !=
null)
2233 InsertHash(temp, monthName + monthPostfix, TokenType.MonthToken, i);
2237 InsertHash(temp, monthName, TokenType.MonthToken, i);
2240 monthName = GetAbbreviatedMonthName(i);
2241 InsertHash(temp, monthName, TokenType.MonthToken, i);
2245 private static bool TryParseHebrewNumber(ref __DTString str, out
bool badFormat, out
int number)
2249 int num = str.Index;
2250 if (!HebrewNumber.IsDigit(str.Value[num]))
2254 HebrewNumberParsingContext context =
new HebrewNumberParsingContext(0);
2255 HebrewNumberParsingState hebrewNumberParsingState;
2258 hebrewNumberParsingState = HebrewNumber.ParseByChar(str.Value[num++], ref context);
2259 if (hebrewNumberParsingState == HebrewNumberParsingState.InvalidHebrewNumber || hebrewNumberParsingState == HebrewNumberParsingState.NotHebrewDigit)
2264 while (num < str.Value.Length && hebrewNumberParsingState != HebrewNumberParsingState.FoundEndOfHebrewNumber);
2265 if (hebrewNumberParsingState != HebrewNumberParsingState.FoundEndOfHebrewNumber)
2269 str.Advance(num - str.Index);
2270 number = context.result;
2274 private static bool IsHebrewChar(
char ch)
2278 return ch <=
'\u05ff';
2284 internal bool Tokenize(TokenType TokenMask, out TokenType tokenType, out
int tokenValue, ref __DTString str)
2286 tokenType = TokenType.UnknownToken;
2288 char c = str.m_current;
2289 bool flag =
char.IsLetter(c);
2292 c =
char.ToLower(c, Culture);
2293 if (IsHebrewChar(c) && TokenMask == TokenType.RegularTokenMask && TryParseHebrewNumber(ref str, out
bool badFormat, out tokenValue))
2297 tokenType = TokenType.UnknownToken;
2300 tokenType = TokenType.HebrewNumber;
2304 int num = (int)c % 199;
2305 int num2 = 1 + (int)c % 197;
2306 int num3 = str.len - str.Index;
2308 TokenHashValue[] array = m_dtfiTokenHash;
2311 array = CreateTokenHashTable();
2315 TokenHashValue tokenHashValue = array[num];
2316 if (tokenHashValue ==
null)
2320 if ((tokenHashValue.tokenType & TokenMask) > (TokenType)0 && tokenHashValue.tokenString.Length <= num3)
2322 if (
string.Compare(str.Value, str.Index, tokenHashValue.tokenString, 0, tokenHashValue.tokenString.Length, Culture,
CompareOptions.IgnoreCase) == 0)
2325 if (flag && (index = str.Index + tokenHashValue.tokenString.Length) < str.len)
2327 char c2 = str.Value[index];
2328 if (
char.IsLetter(c2))
2333 tokenType = (tokenHashValue.tokenType & TokenMask);
2334 tokenValue = tokenHashValue.tokenValue;
2335 str.Advance(tokenHashValue.tokenString.Length);
2338 if (tokenHashValue.tokenType == TokenType.MonthToken && HasSpacesInMonthNames)
2340 int matchLength = 0;
2341 if (str.MatchSpecifiedWords(tokenHashValue.tokenString, checkWordBoundary:
true, ref matchLength))
2343 tokenType = (tokenHashValue.tokenType & TokenMask);
2344 tokenValue = tokenHashValue.tokenValue;
2345 str.Advance(matchLength);
2349 else if (tokenHashValue.tokenType == TokenType.DayOfWeekToken && HasSpacesInDayNames)
2351 int matchLength2 = 0;
2352 if (str.MatchSpecifiedWords(tokenHashValue.tokenString, checkWordBoundary:
true, ref matchLength2))
2354 tokenType = (tokenHashValue.tokenType & TokenMask);
2355 tokenValue = tokenHashValue.tokenValue;
2356 str.Advance(matchLength2);
2372 private void InsertAtCurrentHashNode(TokenHashValue[] hashTable,
string str,
char ch, TokenType tokenType,
int tokenValue,
int pos,
int hashcode,
int hashProbe)
2374 TokenHashValue tokenHashValue = hashTable[hashcode];
2375 hashTable[hashcode] =
new TokenHashValue(str, tokenType, tokenValue);
2378 hashcode += hashProbe;
2379 if (hashcode >= 199)
2383 TokenHashValue tokenHashValue2 = hashTable[hashcode];
2384 if (tokenHashValue2 ==
null ||
char.ToLower(tokenHashValue2.tokenString[0], Culture) == ch)
2386 hashTable[hashcode] = tokenHashValue;
2387 if (tokenHashValue2 ==
null)
2391 tokenHashValue = tokenHashValue2;
2396 private void InsertHash(TokenHashValue[] hashTable,
string str, TokenType tokenType,
int tokenValue)
2398 if (str ==
null || str.Length == 0)
2403 if (
char.IsWhiteSpace(str[0]) ||
char.IsWhiteSpace(str[str.Length - 1]))
2405 str = str.Trim(
null);
2406 if (str.Length == 0)
2411 char c =
char.ToLower(str[0], Culture);
2412 int num2 = (int)c % 199;
2413 int num3 = 1 + (int)c % 197;
2416 TokenHashValue tokenHashValue = hashTable[num2];
2417 if (tokenHashValue ==
null)
2419 hashTable[num2] =
new TokenHashValue(str, tokenType, tokenValue);
2422 if (str.Length >= tokenHashValue.tokenString.Length &&
string.Compare(str, 0, tokenHashValue.tokenString, 0, tokenHashValue.tokenString.Length, Culture,
CompareOptions.IgnoreCase) == 0)
2424 if (str.Length > tokenHashValue.tokenString.Length)
2428 int tokenType2 = (int)tokenHashValue.tokenType;
2429 if (preferExistingTokens || BinaryCompatibility.TargetsAtLeast_Desktop_V4_5_1)
2431 if (((tokenType2 & 0xFF) == 0 && (tokenType & TokenType.RegularTokenMask) != 0) || ((tokenType2 & 0xFF00) == 0 && (tokenType & TokenType.SeparatorTokenMask) != 0))
2433 tokenHashValue.tokenType |= tokenType;
2434 if (tokenValue != 0)
2436 tokenHashValue.tokenValue = tokenValue;
2440 else if ((((
int)tokenType | tokenType2) & 0xFF) == (int)tokenType || (((
int)tokenType | tokenType2) & 0xFF00) == (int)tokenType)
2442 tokenHashValue.tokenType |= tokenType;
2443 if (tokenValue != 0)
2445 tokenHashValue.tokenValue = tokenValue;
2460 InsertAtCurrentHashNode(hashTable, str, c, tokenType, tokenValue, num, num2, num3);
static Thread CurrentThread
Gets the currently running thread.
abstract int GetYear(DateTime time)
When overridden in a derived class, returns the year in the specified T:System.DateTime.
object Clone()
Creates a new object that is a copy of the current instance.
The exception that is thrown when a null reference (Nothing in Visual Basic) is passed to a method th...
virtual object GetFormat(Type formatType)
Gets an object that defines how to format the specified type.
Represents time in divisions, such as weeks, months, and years.
virtual DateTime MinSupportedDateTime
Gets the earliest date and time supported by this T:System.Globalization.Calendar object.
StringComparison
Specifies the culture, case, and sort rules to be used by certain overloads of the M:System....
virtual DateTime MaxSupportedDateTime
Gets the latest date and time supported by this T:System.Globalization.Calendar object.
The exception that is thrown when the value of an argument is outside the allowable range of values a...
Compare strings using culture-sensitive sort rules and the invariant culture.
static CompareInfo GetCompareInfo(int culture, Assembly assembly)
Initializes a new T:System.Globalization.CompareInfo object that is associated with the specified cul...
Describes the source and destination of a given serialized stream, and provides an additional caller-...
static CultureInfo GetCultureInfo(int culture)
Retrieves a cached, read-only instance of a culture by using the specified culture identifier.
A type representing a date and time value.
CultureInfo?? CurrentCulture
Gets or sets the culture for the current thread.
Provides information about, and means to manipulate, the current environment and platform....
static Calendar ReadOnly(Calendar calendar)
Returns a read-only version of the specified T:System.Globalization.Calendar object.
Represents a collection of key/value pairs that are organized based on the hash code of the key....
Implements a set of methods for culture-sensitive string comparisons.
Supports cloning, which creates a new instance of a class with the same value as an existing instance...
CalendarWeekRule
Defines different rules for determining the first week of the year.
abstract int [] Eras
When overridden in a derived class, gets the list of eras in the current calendar.
Specifies that the class can be serialized.
The exception that is thrown when a method call is invalid for the object's current state.
virtual bool IsLeapYear(int year)
Determines whether the specified year in the current era is a leap year.
Provides information about a specific culture (called a locale for unmanaged code development)....
CompareOptions
Defines the string comparison options to use with T:System.Globalization.CompareInfo.
DateTimeStyles
Defines the formatting options that customize string parsing for some date and time parsing methods.
DayOfWeek
Specifies the day of the week.
virtual object Clone()
Creates a new object that is a copy of the current T:System.Globalization.Calendar object.
Creates and controls a thread, sets its priority, and gets its status.