/// <summary>Parses the date value using the given date formats.</summary> /// <remarks>Parses the date value using the given date formats.</remarks> /// <param name="dateValue">the date value to parse</param> /// <param name="dateFormats">the date formats to use</param> /// <param name="startDate"> /// During parsing, two digit years will be placed in the range /// <code>startDate</code> to <code>startDate + 100 years</code>. This value may /// be <code>null</code>. When <code>null</code> is given as a parameter, year /// <code>2000</code> will be used. /// </param> /// <returns>the parsed date or null if input could not be parsed</returns> public static DateTime ParseDate(string dateValue, string[] dateFormats, DateTime startDate) { Args.NotNull(dateValue, "Date value"); string[] localDateFormats = dateFormats != null ? dateFormats : DefaultPatterns; DateTime localStartDate = startDate != null ? startDate : DefaultTwoDigitYearStart; string v = dateValue; // trim single quotes around date if present // see issue #5279 if (v.Length > 1 && v.StartsWith("'") && v.EndsWith("'")) { v = Sharpen.Runtime.Substring(v, 1, v.Length - 1); } foreach (string dateFormat in localDateFormats) { SimpleDateFormat dateParser = DateUtils.DateFormatHolder.FormatFor(dateFormat); dateParser.Set2DigitYearStart(localStartDate); ParsePosition pos = new ParsePosition(0); DateTime result = dateParser.Parse(v, pos); if (pos.GetIndex() != 0) { return(result); } } return(null); }