// April 20 - 25, 2020 private static Tuple <DateTime, DateTime> ParseBlissCruisesDates(string dateTime) { if (string.IsNullOrWhiteSpace(dateTime)) { return(null); } string currentYear = DateTime.Now.Year.ToString(); string nextYear = DateTime.Now.AddYears(1).Year.ToString(); string twoYears = DateTime.Now.AddYears(2).Year.ToString(); DateTime startDate = DateTime.MinValue; DateTime endDate = DateTime.MinValue; string date = CleanDateString(dateTime).Trim(); date = ReplaceAbbreviatedMonths(date); string month = DateEx.GetMonth(date); string startDay = ""; string endDay = ""; string year = currentYear; if (dateTime.Contains(nextYear)) { year = nextYear; } if (dateTime.Contains(twoYears)) { year = twoYears; } string[] dateSplit = date.Split(' '); for (int i = 0; i < dateSplit.Length; i++) { if (dateSplit[i] == "-") { startDay = dateSplit[i - 1]; endDay = dateSplit[i + 1].ToSafeString(true); } } DateTime.TryParse($"{month} {startDay}, {year}", out startDate); DateTime.TryParse($"{month} {endDay}, {year}", out endDate); return(new Tuple <DateTime, DateTime>(startDate, endDate)); }
private static Tuple <DateTime, DateTime> ParseModernLifestyleDates(string dateTime) { string currentYear = DateTime.Now.Year.ToString(); string nextYear = DateTime.Now.AddYears(1).Year.ToString(); // for dates that start on new years eve etc and end on end next day or after DateTime startDate = DateTime.MinValue; // so if defaulted to this it won't show up in list DateTime endDate = DateTime.MinValue; //startDate.AddDays(100); string date = CleanDateString(dateTime); date = ReplaceAbbreviatedMonths(date); int monthCount = GetMonthCount(date); if (monthCount > 1) { return(ParseSplitDates(date)); } string month = DateEx.GetMonth(date); string day = ""; string year = ""; // //Fri-Tue, Jan 24-31 #region Try an determine the end token for the date line. It should be year, am or pm. string endToken = ""; if (date.EndsWith(currentYear)) { endToken = currentYear; year = currentYear; } else if (date.EndsWith(nextYear)) { endToken = nextYear; year = nextYear; } else if (date.EndsWith("am")) { endToken = "am"; } else if (date.EndsWith("pm")) { endToken = "pm"; } else { return(new Tuple <DateTime, DateTime>(startDate, endDate)); } #endregion // get end token // Get year if (string.IsNullOrWhiteSpace(year)) { if (date.Contains(nextYear)) { year = nextYear; } else { year = currentYear; } } // Get Day int dayNum = -1; string[] dateSplit = date.Split(' '); day = dateSplit[1];// should be if (int.TryParse(day, out dayNum) == false) { day = dateSplit[2]; } // if day is 02 try parse int to get it to number if (day.StartsWith("0")) { int test = 0; if (int.TryParse(day, out test)) { day = test.ToString(); } } if (endToken == "pm") { //we'll have to get int startIndex = date.IndexOf(month); date = date.Substring(startIndex); } else { date = date.Substring(month, endToken, true); } string input = ""; try { if (DateTime.TryParse(date, out startDate) == false) { // it might be missing the year if (DateTime.TryParse($"{month} {day}, {year}", out startDate) == false) { return(new Tuple <DateTime, DateTime>(startDate, endDate)); } } if (endToken == "am") { endDate = startDate.AddDays(1); } else// if(endToken == "pm") { endDate = startDate; } //if it's just a start date we'll make it the end date also because the query loks at the end date when populating the list } catch { Debug.Assert(false, "failed to parse date."); } return(new Tuple <DateTime, DateTime>(startDate, endDate)); }
private static Tuple <DateTime, DateTime> ParseModernLifestyleWebDates(string dateTime) { if (string.IsNullOrWhiteSpace(dateTime)) { return(null); } string currentYear = DateTime.Now.Year.ToString(); string nextYear = DateTime.Now.AddYears(1).Year.ToString(); string twoYears = DateTime.Now.AddYears(2).Year.ToString(); DateTime startDate = DateTime.MinValue; DateTime endDate = DateTime.MinValue; string date = CleanDateString(dateTime).Trim(); date = ReplaceAbbreviatedMonths(date); string startMonth = DateEx.GetMonth(date); string endMonth = DateEx.GetMonth(date); string startDay = ""; string endDay = ""; string year = currentYear; if (dateTime.Contains(nextYear)) { year = nextYear; } if (dateTime.Contains(twoYears)) { year = twoYears; } bool found = false; string[] dateSplit = date.Split(' '); for (int i = 0; i < dateSplit.Length; i++) { if (dateSplit[i] == "-") { startDay = dateSplit[i - 1]; endDay = dateSplit[i + 1].ToSafeString(true); int tmp = -1; if (!int.TryParse(startDay.Trim(), out tmp)) { continue; } if (!int.TryParse(endDay.Trim(), out tmp)) { endMonth = DateEx.GetMonth(endDay); endDay = dateSplit[i + 2].ToSafeString(true); //skip ahead two } if (!int.TryParse(endDay.Trim(), out tmp)) { Debug.Assert(false, "shouldn't get here"); continue; } found = true; } } if (!found) { // Fri, Mar 13 for (int i = 0; i < dateSplit.Length; i++) { int day = -1; if (int.TryParse(dateSplit[i].Trim(), out day)) { startDay = day.ToString(); endDay = startDay; break; } } } if (string.IsNullOrWhiteSpace(endDay)) { endDay = startDay; } DateTime.TryParse($"{startMonth} {startDay}, {year}", out startDate); DateTime.TryParse($"{endMonth} {endDay}, {year}", out endDate); if (endDate == DateTime.MinValue) { endDate = startDate; } return(new Tuple <DateTime, DateTime>(startDate, endDate)); }