static bool TryGetMonth(DateToken token, byte[] text, out int month) { month = 0; if (!token.IsMonth || token.Length < 3) { return(false); } var name = Encoding.ASCII.GetString(text, token.StartIndex, token.Length); if (name.Length > 3) { name = name.Substring(0, 3); } for (int i = 0; i < Months.Length; i++) { if (Months[i].Equals(name, StringComparison.OrdinalIgnoreCase)) { month = i + 1; return(true); } } return(false); }
static bool TryGetWeekday(DateToken token, byte[] text, out DayOfWeek weekday) { weekday = DayOfWeek.Sunday; if (!token.IsWeekday || token.Length < 3) { return(false); } var name = Encoding.ASCII.GetString(text, token.StartIndex, token.Length); if (name.Length > 3) { name = name.Substring(0, 3); } for (int day = 0; day < WeekDays.Length; day++) { if (WeekDays[day].Equals(name, StringComparison.OrdinalIgnoreCase)) { weekday = (DayOfWeek)day; return(true); } } return(false); }
static bool TryGetYear(DateToken token, byte[] text, out int year) { int endIndex = token.StartIndex + token.Length; int index = token.StartIndex; year = 0; if (!token.IsNumeric) { return(false); } if (!ParseUtils.TryParseInt32(text, ref index, endIndex, out year)) { return(false); } if (year < 100) { year += (year < 70) ? 2000 : 1900; } if (year < 1969) { return(false); } return(true); }
static bool TryGetMonth(DateToken token, byte[] text, out int month) { month = 0; if (!token.IsMonth || token.Length < 3) { return(false); } var name = Encoding.ASCII.GetString(text, token.StartIndex, token.Length); if (name.Length > 3) { name = name.Substring(0, 3); } for (int i = 0; i < Months.Length; i++) { if (icase.Compare(Months[i], name) == 0) { month = i + 1; return(true); } } return(false); }
static bool TryGetTimeZone(DateToken token, byte[] text, out int tzone) { tzone = 0; if (token.IsNumericZone) { if (!token.Flags.HasFlag(DateTokenFlags.HasSign)) { return(false); } int endIndex = token.StartIndex + token.Length; int index = token.StartIndex; int sign; if (text[index] == (byte)'-') { sign = -1; } else if (text[index] == (byte)'+') { sign = 1; } else { return(false); } index++; if (!ParseUtils.TryParseInt32(text, ref index, endIndex, out tzone) || index != endIndex) { return(false); } tzone *= sign; } else if (token.IsAlphaZone) { if (token.Length > 3) { return(false); } var name = Encoding.ASCII.GetString(text, token.StartIndex, token.Length); if (!timezones.TryGetValue(name, out tzone)) { return(false); } } else { return(false); } return(true); }
static bool TryGetTimeOfDay(DateToken token, byte[] text, out int hour, out int minute, out int second) { int endIndex = token.StartIndex + token.Length; int index = token.StartIndex; hour = minute = second = 0; if (!token.IsTimeOfDay) { return(false); } if (!ParseUtils.TryParseInt32(text, ref index, endIndex, out hour) || hour > 23) { return(false); } if (index >= endIndex || text[index++] != (byte)':') { return(false); } if (!ParseUtils.TryParseInt32(text, ref index, endIndex, out minute) || minute > 59) { return(false); } // Allow just hh:mm (i.e. w/o the :ss?) if (index >= endIndex || text[index++] != (byte)':') { return(true); } if (!ParseUtils.TryParseInt32(text, ref index, endIndex, out second) || second > 59) { return(false); } if (index < endIndex) { return(false); } return(true); }
static bool TryGetDayOfMonth(DateToken token, byte[] text, out int day) { int endIndex = token.StartIndex + token.Length; int index = token.StartIndex; day = 0; if (!token.IsNumeric) { return(false); } if (!ParseUtils.TryParseInt32(text, ref index, endIndex, out day)) { return(false); } if (day <= 0 || day > 31) { return(false); } return(true); }
static bool TryGetYear(DateToken token, byte[] text, out int year) { int endIndex = token.StartIndex + token.Length; int index = token.StartIndex; year = 0; if (!token.IsNumeric) return false; if (!ParseUtils.TryParseInt32 (text, ref index, endIndex, out year)) return false; if (year < 100) year += (year < 70) ? 2000 : 1900; return year >= 1969; }
static bool TryGetWeekday(DateToken token, byte[] text, out DayOfWeek weekday) { weekday = DayOfWeek.Sunday; if (!token.IsWeekday || token.Length < 3) return false; var name = Encoding.ASCII.GetString (text, token.StartIndex, token.Length); if (name.Length > 3) name = name.Substring (0, 3); for (int day = 0; day < WeekDays.Length; day++) { if (icase.Compare (WeekDays[day], name) == 0) { weekday = (DayOfWeek) day; return true; } } return false; }
static bool TryGetTimeZone(DateToken token, byte[] text, out int tzone) { tzone = 0; if (token.IsNumericZone) { if (!token.Flags.HasFlag (DateTokenFlags.HasSign)) return false; int endIndex = token.StartIndex + token.Length; int index = token.StartIndex; int sign; if (text[index] == (byte) '-') sign = -1; else if (text[index] == (byte) '+') sign = 1; else return false; index++; if (!ParseUtils.TryParseInt32 (text, ref index, endIndex, out tzone) || index != endIndex) return false; tzone *= sign; } else if (token.IsAlphaZone) { if (token.Length > 3) return false; var name = Encoding.ASCII.GetString (text, token.StartIndex, token.Length); if (!timezones.TryGetValue (name, out tzone)) return false; } else { return false; } return true; }
static bool TryGetTimeOfDay(DateToken token, byte[] text, out int hour, out int minute, out int second) { int endIndex = token.StartIndex + token.Length; int index = token.StartIndex; hour = minute = second = 0; if (!token.IsTimeOfDay) return false; if (!ParseUtils.TryParseInt32 (text, ref index, endIndex, out hour) || hour > 23) return false; if (index >= endIndex || text[index++] != (byte) ':') return false; if (!ParseUtils.TryParseInt32 (text, ref index, endIndex, out minute) || minute > 59) return false; // Allow just hh:mm (i.e. w/o the :ss?) if (index >= endIndex || text[index++] != (byte) ':') return true; if (!ParseUtils.TryParseInt32 (text, ref index, endIndex, out second) || second > 59) return false; return index == endIndex; }
static bool TryGetMonth(DateToken token, byte[] text, out int month) { month = 0; if (!token.IsMonth || token.Length < 3) return false; var name = Encoding.ASCII.GetString (text, token.StartIndex, token.Length); if (name.Length > 3) name = name.Substring (0, 3); for (int i = 0; i < Months.Length; i++) { if (icase.Compare (Months[i], name) == 0) { month = i + 1; return true; } } return false; }
static bool TryGetDayOfMonth(DateToken token, byte[] text, out int day) { int endIndex = token.StartIndex + token.Length; int index = token.StartIndex; day = 0; if (!token.IsNumeric) return false; if (!ParseUtils.TryParseInt32 (text, ref index, endIndex, out day)) return false; if (day <= 0 || day > 31) return false; return true; }
static bool TryGetMonth (DateToken token, byte[] text, out int month) { month = 0; if (!token.IsMonth || token.Length < 3) return false; var name = Encoding.ASCII.GetString (text, token.StartIndex, token.Length); if (name.Length > 3) name = name.Substring (0, 3); for (int i = 0; i < Months.Length; i++) { if (Months[i].Equals (name, StringComparison.OrdinalIgnoreCase)) { month = i + 1; return true; } } return false; }