using System.Text.RegularExpressions;
using System.Globalization;
if (DateTime.TryParseExact("26Dec 11:30pm", "d MMM h:mmtt", CultureInfo.InvariantCulture, DateTimeStyles.AllowInnerWhite, out DateTime dateTime1))
if (DateTime.TryParseExact("30/12 12:00pm", "d/mm h:mmtt", CultureInfo.InvariantCulture, DateTimeStyles.AllowInnerWhite, out DateTime dateTime))
Console.WriteLine(dateTime);
private static DateTime? ParseStringToDate_ByFormat(string dateStr, string timeStr, string dateTimeFormat)
var thisYear = DateTime.Now.Year.ToString();
if (!dateStr.EndsWith(thisYear) || !dateStr.EndsWith(thisYear.Substring(2, 2)))
timeStr = AddColonToTime(timeStr);
if (DateTime.TryParseExact($"{dateStr} {timeStr}", dateTimeFormat, CultureInfo.InvariantCulture, DateTimeStyles.AllowInnerWhite, out DateTime dateTime))
return AddOneYearIfMoreThan6MonthsOld(dateTime);
private static string AddColonToTime(string timeStr)
string pattern = @"^(\d{1,2})(\d{2})?(am|pm)?$";
return Regex.Replace(timeStr.ToLower().Replace(" ", "").Replace(".", ""), pattern, match =>
string hour = match.Groups[1].Value;
string minute = match.Groups[2].Success ? match.Groups[2].Value : "00";
string period = match.Groups[3].Value;
return $"{hour}:{minute}{period}";
private static DateTime AddOneYearIfMoreThan6MonthsOld(DateTime dt)
if (dt <= DateTime.Now.AddMonths(-6))
if (dt > DateTime.Now.AddMonths(6))
static string ExtractNumericValue(string input)
Match match = Regex.Match(input, @"\d+");
return match.Success ? match.Value : string.Empty;