private DateCalendarType GuessCalendarType(int yearNumber) { DateTime today = DateTime.Today; int gregYear = today.Year; int jalaliYear = (new PersianCalendarEx(today)).GetYear(); int ghamariYear = (new HijriCalendarEx(today)).GetYear(); int minYearDiff = Math.Abs(yearNumber - gregYear); DateCalendarType minCalendarType = DateCalendarType.Gregorian; int curDiff = Math.Abs(yearNumber - jalaliYear); if (curDiff < minYearDiff) { minYearDiff = curDiff; minCalendarType = DateCalendarType.Jalali; } curDiff = Math.Abs(yearNumber - ghamariYear); if (curDiff < minYearDiff) { minYearDiff = curDiff; minCalendarType = DateCalendarType.HijriGhamari; } return(minCalendarType); }
/// <summary> /// Gets a date description string from the specified values and calendar types. /// The string is a descriptive statement in Persian Language. /// </summary> /// <param name="t">The type of calendar.</param> /// <param name="w">The day of the week.</param> /// <param name="dayNumber">The day of the month.</param> /// <param name="monthNum">The month number.</param> /// <param name="yearNum">The year number.</param> /// <returns></returns> public static string GetPersianDateString(DateCalendarType t, Weekdays w, int dayNumber, int monthNum, int yearNum) { string strWeekday = GetPersianWeekdayName(w); string strMonth = ""; switch (t) { case DateCalendarType.Gregorian: strMonth = GetPersianGregorianMonthName(monthNum); break; case DateCalendarType.Jalali: strMonth = GetPresianJalaliMonthName(monthNum); break; case DateCalendarType.HijriGhamari: strMonth = GetPersianGhamariMonthName(monthNum); break; } string day = ""; if (0 < dayNumber && dayNumber < 35) { day = NumberToPersianString.ToString(dayNumber); } string year = ""; if (0 <= yearNum) { year = NumberToPersianString.ToString(yearNum); } StringBuilder sb = new StringBuilder(); if (strWeekday.Length > 0) { sb.Append(strWeekday + " "); } if (day.Length > 0) { sb.Append(day + " "); } if (strMonth.Length > 0) { sb.Append(strMonth + " "); } if (year.Length > 0) { sb.Append(year + " "); } return(sb.ToString().Trim()); }
/// <summary> /// Initializes a new instance of the <see cref="EnglishDatePatternInfo"/> class. /// </summary> /// <param name="content">The m_content.</param> /// <param name="index">The m_index.</param> /// <param name="length">The length of the pattern found.</param> /// <param name="t">The type of the calendar.</param> /// <param name="w">The day of the week.</param> /// <param name="dayNo">The day number (in month).</param> /// <param name="monthNo">The month number.</param> /// <param name="yearNo">The year number.</param> public EnglishDatePatternInfo(string content, int index, int length, DateCalendarType t, Weekdays w, int dayNo, int monthNo, int yearNo) { m_content = content; m_index = index; m_length = length; m_calType = t; m_weekday = w; m_dayNumber = dayNo; m_monthNumber = monthNo; m_yearNumber = yearNo; }
/// <summary> /// Initializes a new instance of the <see cref="PersianDatePatternInfo"/> class. /// </summary> /// <param name="content">The content.</param> /// <param name="index">The index.</param> /// <param name="length">The length of the found pattern.</param> /// <param name="t">The calendar type.</param> /// <param name="w">The day of the week.</param> /// <param name="dayNo">The day number (in month).</param> /// <param name="monthNo">The month number.</param> /// <param name="yearNo">The year number.</param> public PersianDatePatternInfo(string content, int index, int length, DateCalendarType t, Weekdays w, int dayNo, int monthNo, int yearNo) { this.content = content; this.index = index; this.length = length; this.calType = t; this.weekday = w; this.dayNumber = dayNo; this.monthNumber = monthNo; this.yearNumber = yearNo; }
private DateCalendarType GuessCalendarTypeAndAddPossibleYearNumbers(int yearNumber) { DateTime today = DateTime.Today; int gregYear = today.Year; int jalaliYear = (new PersianCalendarEx(today)).GetYear(); int ghamariYear = (new HijriCalendarEx(today)).GetYear(); int minYearDiff = Math.Abs(yearNumber - gregYear); DateCalendarType minCalendarType = DateCalendarType.Gregorian; int curDiff = Math.Abs(yearNumber - jalaliYear); if (curDiff < minYearDiff) { minYearDiff = curDiff; minCalendarType = DateCalendarType.Jalali; } curDiff = Math.Abs(yearNumber - ghamariYear); if (curDiff < minYearDiff) { minYearDiff = curDiff; minCalendarType = DateCalendarType.HijriGhamari; } if (yearNumber < 100) { // IT's better not to guess ghamari calendar //curDiff = Math.Abs(1400 + yearNumber - ghamariYear); //if (curDiff < minYearDiff) //{ // minYearDiff = curDiff; // minCalendarType = DateCalendarType.HijriGhamari; //} curDiff = Math.Abs(1300 + yearNumber - jalaliYear); if (curDiff < minYearDiff) { minYearDiff = curDiff; minCalendarType = DateCalendarType.Jalali; } curDiff = Math.Abs(2000 + yearNumber - gregYear); if (curDiff < minYearDiff) { minYearDiff = curDiff; minCalendarType = DateCalendarType.Gregorian; } } return(minCalendarType); }
private void AddPossibleYearNumbers(int yearNumber, DateCalendarType calendarType) { comboYearNumber.Items.Clear(); if (yearNumber <= 0) { return; } if (yearNumber < 100) { int newYear = yearNumber; switch (calendarType) { case DateCalendarType.Gregorian: if ((2000 - (1900 + yearNumber)) < ((2000 + yearNumber) - 2000)) { newYear += 1900; } else { newYear += 2000; } break; case DateCalendarType.HijriGhamari: newYear += 1400; break; case DateCalendarType.Jalali: newYear += 1300; break; default: break; } comboYearNumber.Items.Add(ParsingUtils.ConvertNumber2Persian(newYear.ToString())); comboYearNumber.Visible = true; comboYearNumber.Enabled = true; } comboYearNumber.Items.Add(ParsingUtils.ConvertNumber2Persian(yearNumber.ToString())); comboYearNumber.SelectedIndex = 0; }
private ListViewItem[] CreateNumericDateSuggestions(NumericDatePatternInfo pi) { if (pi == null) { return(new ListViewItem[0]); } m_originalYearNumber = pi.YearNumber; DateCalendarType calType = GuessCalendarTypeAndAddPossibleYearNumbers(pi.YearNumber); AddPossibleYearNumbers(pi.YearNumber, calType); ListViewItem[] items = CreateGeneralDateSuggestions( new NumericDatePatternInfo(pi.Content, pi.Index, pi.Length, pi.DayNumber, pi.MonthNumber, GetSelectedYearNumber()), calType); cmboGuessedCalendarType.Enabled = true; return(items); }
/// <summary> /// Parses and extracts information from the found regex match object /// containing an English date. /// The parsed pattern info is returned, and null is returned if /// the Match does not contain valid data. /// </summary> /// <param name="m">The regex match object to be parsed.</param> /// <returns></returns> private EnglishDatePatternInfo ExtractFromEnglishDate(Match m) { Weekdays weekday = Weekdays.Illeagal; int dayNum = -1; int monthNum = -1; int yearNum = -1; weekday = ExtractWeekday(m); dayNum = ExtractDayNum(m); monthNum = ExtractMonthNum(m); DateCalendarType ct = DateCalendarType.Illegal; if (1 <= monthNum && monthNum <= 12) { ct = DateCalendarType.Jalali; } else if (13 <= monthNum && monthNum <= 24) { ct = DateCalendarType.Gregorian; monthNum -= 12; } else if (25 <= monthNum && monthNum <= 36) { ct = DateCalendarType.HijriGhamari; monthNum -= 24; } else { ct = DateCalendarType.Illegal; } yearNum = ExtractYearNum(m); return(new EnglishDatePatternInfo(m.Value, m.Index, m.Length, ct, weekday, dayNum, monthNum, yearNum)); }
private ListViewItem[] CreateGeneralDateSuggestions(NumericDatePatternInfo pi, DateCalendarType calendarType) { if (pi == null) { return(new ListViewItem[0]); } currentNumericDatePatternInfo = pi; List <ListViewItem> lstSug = new List <ListViewItem>(); if (pi.YearNumber >= 0 && pi.DayNumber > 0 && pi.MonthNumber > 0) { if (calendarType == DateCalendarType.Jalali) { try { cmboGuessedCalendarType.SelectedIndex = 0; PersianCalendarEx pc = new PersianCalendarEx(pi.YearNumber, pi.MonthNumber, pi.DayNumber); lstSug.Add(CreateListViewItem(ParsingUtils.ConvertNumber2Persian(pc.ToString()), UIDateTypes.NumericalPersian, UIDateGroups.Jalali)); lstSug.Add(CreateListViewItem(pc.ToString(), UIDateTypes.NumericalEnglish, UIDateGroups.Jalali)); lstSug.Add(CreateListViewItem(pc.ToString("D"), UIDateTypes.Literal, UIDateGroups.Jalali)); DateTime dt = pc.DateTime; lstSug.Add(CreateListViewItem(CalendarStringUtils.GetPersianDateString(dt), UIDateTypes.Literal, UIDateGroups.Gregorian)); lstSug.Add(CreateListViewItem(ParsingUtils.ConvertNumber2Persian(dt.ToString("d")), UIDateTypes.NumericalPersian, UIDateGroups.Gregorian)); lstSug.Add(CreateListViewItem(dt.ToString("d"), UIDateTypes.NumericalEnglish, UIDateGroups.Gregorian)); HijriCalendarEx hc = new HijriCalendarEx(pc.DateTime); lstSug.Add(CreateListViewItem(hc.ToString("D"), UIDateTypes.Literal, UIDateGroups.Ghamari)); lstSug.Add(CreateListViewItem(ParsingUtils.ConvertNumber2Persian(hc.ToString("d")), UIDateTypes.NumericalPersian, UIDateGroups.Ghamari)); lstSug.Add(CreateListViewItem(hc.ToString("d"), UIDateTypes.NumericalEnglish, UIDateGroups.Ghamari)); } catch { } } else if (calendarType == DateCalendarType.Gregorian) { try { cmboGuessedCalendarType.SelectedIndex = 1; DateTime dt = new DateTime(pi.YearNumber, pi.MonthNumber, pi.DayNumber); lstSug.Add(CreateListViewItem(dt.ToString("d"), UIDateTypes.NumericalEnglish, UIDateGroups.Gregorian)); lstSug.Add(CreateListViewItem(ParsingUtils.ConvertNumber2Persian(dt.ToString("d")), UIDateTypes.NumericalPersian, UIDateGroups.Gregorian)); lstSug.Add(CreateListViewItem(CalendarStringUtils.GetPersianDateString(dt), UIDateTypes.Literal, UIDateGroups.Gregorian)); PersianCalendarEx pc = new PersianCalendarEx(dt); lstSug.Add(CreateListViewItem(pc.ToString("D"), UIDateTypes.Literal, UIDateGroups.Jalali)); lstSug.Add(CreateListViewItem(ParsingUtils.ConvertNumber2Persian(pc.ToString("d")), UIDateTypes.NumericalPersian, UIDateGroups.Jalali)); lstSug.Add(CreateListViewItem(pc.ToString("d"), UIDateTypes.NumericalEnglish, UIDateGroups.Jalali)); HijriCalendarEx hc = new HijriCalendarEx(dt); lstSug.Add(CreateListViewItem(hc.ToString("D"), UIDateTypes.Literal, UIDateGroups.Ghamari)); lstSug.Add(CreateListViewItem(ParsingUtils.ConvertNumber2Persian(hc.ToString("d")), UIDateTypes.NumericalPersian, UIDateGroups.Ghamari)); lstSug.Add(CreateListViewItem(hc.ToString("d"), UIDateTypes.NumericalEnglish, UIDateGroups.Ghamari)); } catch /*(Exception ex)*/ { } } else if (calendarType == DateCalendarType.HijriGhamari) { try { cmboGuessedCalendarType.SelectedIndex = 2; HijriCalendarEx hc = new HijriCalendarEx(pi.YearNumber, pi.MonthNumber, pi.DayNumber); lstSug.Add(CreateListViewItem(ParsingUtils.ConvertNumber2Persian(hc.ToString()), UIDateTypes.NumericalPersian, UIDateGroups.Ghamari)); lstSug.Add(CreateListViewItem(hc.ToString(), UIDateTypes.NumericalEnglish, UIDateGroups.Ghamari)); lstSug.Add(CreateListViewItem(hc.ToString("D"), UIDateTypes.Literal, UIDateGroups.Ghamari)); DateTime dt = hc.DateTime; lstSug.Add(CreateListViewItem(CalendarStringUtils.GetPersianDateString(dt), UIDateTypes.Literal, UIDateGroups.Gregorian)); lstSug.Add(CreateListViewItem(ParsingUtils.ConvertNumber2Persian(dt.ToString("d")), UIDateTypes.NumericalPersian, UIDateGroups.Gregorian)); lstSug.Add(CreateListViewItem(dt.ToString("d"), UIDateTypes.NumericalEnglish, UIDateGroups.Gregorian)); PersianCalendarEx pc = new PersianCalendarEx(hc.DateTime); lstSug.Add(CreateListViewItem(pc.ToString("D"), UIDateTypes.Literal, UIDateGroups.Jalali)); lstSug.Add(CreateListViewItem(ParsingUtils.ConvertNumber2Persian(pc.ToString("d")), UIDateTypes.NumericalPersian, UIDateGroups.Jalali)); lstSug.Add(CreateListViewItem(pc.ToString("d"), UIDateTypes.NumericalEnglish, UIDateGroups.Jalali)); } catch (Exception ex) { } } } return(lstSug.ToArray()); }