public void TestLeapYears() { PersianCalendar cal = new PersianCalendar(); int lastNonLeap = 1; foreach (int year in s_leapYears) { Assert.True(cal.IsLeapYear(year), String.Format("Year {0} is not recognized as leap year", year)); Assert.False(cal.IsLeapYear(lastNonLeap), String.Format("Year {0} is recognized as leap year", lastNonLeap)); lastNonLeap = year - 1; } }
[Test, Timeout(300000)] // Can take a long time under NCrunch. public void BclThroughHistory() { Calendar bcl = new PersianCalendar(); // The "right" BCL equivalent to use depends on the version of .NET... pick it appropriately here. CalendarSystem noda = bcl.IsLeapYear(1) ? CalendarSystem.PersianSimple : CalendarSystem.PersianAstronomical; // Note: Noda Time stops in 9377, whereas the BCL goes into the start of 9378. This is because // Noda Time ensures that the whole year is valid. BclEquivalenceHelper.AssertEquivalent(bcl, noda, noda.MinYear, noda.MaxYear); }
public void GenerateData() { var maxYear = PersianYearMonthDayCalculator.MaxPersianYear; var bcl = new PersianCalendar(); byte[] data = new byte[maxYear / 8 + 1]; // We don't really care whether IsLeapYear(MaxPersianYear+1) returns true or false, // but it must be valid to call it. for (int year = 1; year <= maxYear; year++) { if (bcl.IsLeapYear(year)) { data[year >> 3] |= (byte)(1 << (year & 7)); } } var base64 = Convert.ToBase64String(data); var lineLength = 80; for (int start = 0; start < base64.Length; start += lineLength) { var line = base64.Substring(start, Math.Min(lineLength, base64.Length - start)); var last = start + lineLength >= base64.Length; Console.WriteLine($"\"{line}\"{(last ? "" : " +")}"); } }
public bool IsPersianYearLeap(int persianYear) { var pc = new PersianCalendar(); return pc.IsLeapYear(persianYear); }
private static void MonthMostmonth(int D, int M, int Y, int d, int m, int y) { var pc = new PersianCalendar(); _mAge = (M - 1) - m; _yAge = Y - y; if ((pc.IsLeapYear(Y) && !pc.IsLeapYear(y)) || (pc.IsLeapYear(Y) && pc.IsLeapYear(y)) || (!pc.IsLeapYear(Y) && !pc.IsLeapYear(y))) { if (M >= 1 && M <= 6) { _dAge = (D + 31) - d; _dAge += _yAge / 4; } } if (!pc.IsLeapYear(Y) && pc.IsLeapYear(y)) { if (M >= 1 && M <= 6) { _dAge = (D + 31) - d; _dAge += (_yAge / 4) + 1; } else if (M >= 7 && M <= 11) { _dAge = (D + 30) - d; _dAge += (_yAge / 4) + 2; } else if (M == 12) { _dAge = (D + 29) - d; _dAge += (_yAge / 4) + 3; } } if ((pc.IsLeapYear(Y) && !pc.IsLeapYear(y)) || (pc.IsLeapYear(Y) && pc.IsLeapYear(y))) { if (M >= 7 && M <= 12) { _dAge = (D + 30) - d; _dAge += (_yAge / 4) + 1; } } if (!pc.IsLeapYear(Y) && !pc.IsLeapYear(y)) { if (M >= 7 && M <= 11) { _dAge = (D + 30) - d; _dAge += (_yAge / 4) + 1; } else if (M == 12) { _dAge = (D + 29) - d; _dAge += (_yAge / 4) + 2; } } }
private static void MonthLessmonth(int D, int M, int Y, int d, int m, int y) { PersianCalendar pc = new PersianCalendar(); _mAge = ((M - 1) + 12) - m; _yAge = (Y - 1) - y; if (pc.IsLeapYear(Y) && pc.IsLeapYear(y)) { if (M >= 1 && M <= 6) { _dAge = (D + 31) - d; if (m > 1 && m <= 6) _dAge += (_yAge / 4) + 1; else if (m >= 7 && m <= 11) _dAge += (_yAge / 4); if (m == 12) _dAge += (_yAge / 4) - 1; } /////////////////////// if (M >= 7 && M <= 11) { _dAge = (D + 30) - d; if (m > 7 && m <= 11) _dAge += (_yAge / 4) + 1; if (m == 12) _dAge += (_yAge / 4); } } ////////////////////////////////////////////// if (!pc.IsLeapYear(Y) && pc.IsLeapYear(y)) { if (M >= 1 && M <= 6) { _dAge = (D + 31) - d; if (m >= 1 && m <= 6) _dAge += (_yAge / 4) + 1; if (m >= 7 && m <= 12) _dAge += (_yAge / 4); } if (M >= 7 && M <= 11) { _dAge = (D + 30) - d; if (m >= 7 && m <= 11) _dAge += (_yAge / 4) + 1; if (m == 12) _dAge += (_yAge / 4); } } /////////////////////////////////////////// if (!pc.IsLeapYear(Y) && !pc.IsLeapYear(y)) { if (M >= 1 && M <= 6) { _dAge = (D + 31) - d; if (m >= 1 && m <= 6) _dAge += (_yAge / 4); else if (m >= 7 && m <= 11) _dAge += (_yAge / 4) - 1; else if (m == 12) _dAge += (_yAge / 4) - 2; } else if (M >= 7 && M <= 11) { _dAge = (D + 30) - d; if (m >= 7 && m <= 11) _dAge += _yAge / 4; if (m == 12) _dAge += (_yAge / 4) - 1; } } ////////////////////////////////////////// if (pc.IsLeapYear(Y) && !pc.IsLeapYear(y)) { if (M >= 1 && M <= 6) { _dAge = (D + 31) - d; if (m >= 1 && m <= 6) _dAge += (_yAge / 4); if (m >= 7 && m <= 11) _dAge += (_yAge / 4) - 1; if (m == 12) _dAge += (_yAge / 4) - 2; } /////////////////////// if (M >= 7 && M <= 11) { _dAge = (D + 30) - d; if (m >= 7 && m <= 11) _dAge += _yAge / 4; if (m == 12) _dAge += (_yAge / 4) - 1; } } }
private static void MonthEqualemonth(int D, int M, int Y, int d, int m, int y) { PersianCalendar pc = new PersianCalendar(); _mAge = ((M - 1) + 12) - m; _yAge = (Y - 1) - y; if (M >= 1 && M <= 6) _dAge = (D + 31) - d; else if (M >= 7 && M <= 11) _dAge = (D + 30) - d; else if (M == 12) { if (pc.IsLeapYear(Y)) _dAge = (D + 30) - d; else _dAge = (D + 29) - d; } if (pc.IsLeapYear(y) && !pc.IsLeapYear(Y)) _dAge += (_yAge / 4) + 1; if ((!pc.IsLeapYear(Y) && !pc.IsLeapYear(y)) || (pc.IsLeapYear(Y) && !pc.IsLeapYear(y))) _dAge += (_yAge / 4); if (pc.IsLeapYear(Y) && pc.IsLeapYear(y)) _dAge += (_yAge / 4) + 1; }
/// <summary> /// This method is only present to make it simple to generate the data. /// </summary> /// <returns></returns> internal static string GenerateLeapYearData() { var bcl = new PersianCalendar(); byte[] data = new byte[MaxPersianYear / 8 + 1]; // We don't really care whether IsLeapYear(MaxPersianYear+1) returns true or false, // but it must be valid to call it. for (int year = 1; year <= MaxPersianYear; year++) { if (bcl.IsLeapYear(year)) { data[year >> 3] |= (byte)(1 << (year & 7)); } } return Convert.ToBase64String(data); }
public static bool PersianIsLeap(int PersianYearNumber) { var pc = new System.Globalization.PersianCalendar(); return(pc.IsLeapYear(PersianYearNumber)); }
private void button1_Click(object sender, EventArgs e) { long s1,s2; bool IsLeapYear; long year = 0; try { year = Convert.ToInt64(textBox1.Text); if (year <= 0) { if (radioButton1.Checked || radioButton3.Checked) throw new MinusException(); } if (radioButton2.Checked) { IsLeapYear = false; GregorianCalendar gc = new GregorianCalendar(); if (DateTime.IsLeapYear((int)year)||gc.IsLeapYear((int)year)) IsLeapYear = true; else IsLeapYear = false; if (IsLeapYear) MessageBox.Show("Year " + year + " is a leap year", "Leap Year"); else MessageBox.Show("Year " + year + " is not a leap year", "Leap Year"); } if (radioButton5.Checked && year>0) { IsLeapYear = false; if (year % 4 == 0 && year % 100 != 0) IsLeapYear = true; if (year % 400 == 0) IsLeapYear = true; if (IsLeapYear) MessageBox.Show("Year " + year + " is a leap year", "Leap Year"); else MessageBox.Show("Year " + year + " is not a leap year", "Leap Year"); } else if (year < 0 && radioButton5.Checked) MessageBox.Show("Year must be positive","Error"); if (radioButton1.Checked && year > 0) { IsLeapYear = false; s1 = (year + 2346) % 2820; if (s1 == 0) { IsLeapYear = true; } else { s2 = s1 % 128; switch (s2) { case 0: IsLeapYear = true; break; case 5: IsLeapYear = true; break; case 9: IsLeapYear = true; break; case 13: IsLeapYear = true; break; case 17: IsLeapYear = true; break; case 21: IsLeapYear = true; break; case 25: IsLeapYear = true; break; case 29: IsLeapYear = true; break; case 34: IsLeapYear = true; break; case 38: IsLeapYear = true; break; case 42: IsLeapYear = true; break; case 46: IsLeapYear = true; break; case 50: IsLeapYear = true; break; case 54: IsLeapYear = true; break; case 58: IsLeapYear = true; break; case 62: IsLeapYear = true; break; case 67: IsLeapYear = true; break; case 71: IsLeapYear = true; break; case 75: IsLeapYear = true; break; case 79: IsLeapYear = true; break; case 83: IsLeapYear = true; break; case 87: IsLeapYear = true; break; case 91: IsLeapYear = true; break; case 95: IsLeapYear = true; break; case 100: IsLeapYear = true; break; case 104: IsLeapYear = true; break; case 108: IsLeapYear = true; break; case 112: IsLeapYear = true; break; case 116: IsLeapYear = true; break; case 120: IsLeapYear = true; break; case 124: IsLeapYear = true; break; default: IsLeapYear = false; break; } } if (IsLeapYear) MessageBox.Show("سال " + year + " کبیسه است", "سال کبیسه"); else MessageBox.Show("سال " + year + " کبیسه نیست", "سال کبیسه"); } if (radioButton3.Checked && year > 0) { IsLeapYear = false; s1 = year % 33; switch (s1) { case 1: IsLeapYear = true; break; case 5: IsLeapYear = true; break; case 9: IsLeapYear = true; break; case 13: IsLeapYear = true; break; case 17: IsLeapYear = true; break; case 22: IsLeapYear = true; break; case 26: IsLeapYear = true; break; case 30: IsLeapYear = true; break; } if (IsLeapYear) MessageBox.Show("سال " + year + " کبیسه است", "سال کبیسه"); else MessageBox.Show("سال " + year + " کبیسه نیست", "سال کبیسه"); } if (radioButton4.Checked) { IsLeapYear = false; PersianCalendar ps = new PersianCalendar(); IsLeapYear = ps.IsLeapYear((int)year); if (IsLeapYear) MessageBox.Show("سال " + year + " کبیسه است", "سال کبیسه"); else MessageBox.Show("سال " + year + " کبیسه نیست", "سال کبیسه"); } } catch (OverflowException) { if (radioButton1.Checked || radioButton3.Checked) MessageBox.Show("عدد وارد شده بسیار بزرگ است", "Error"); if (radioButton5.Checked) MessageBox.Show("Your Number is too great","Error"); if (radioButton2.Checked) MessageBox.Show("Your Year Number is greater than 9999", "Error"); if (radioButton4.Checked) MessageBox.Show("سال باید از 9378 کوچکتر باشد", "Error"); } catch (FormatException) { if (radioButton1.Checked || radioButton3.Checked || radioButton4.Checked) MessageBox.Show("ورودی معتبر نیست", "Error"); if (radioButton2.Checked||radioButton5.Checked) MessageBox.Show("Invalid Input", "Error"); } catch (ArgumentOutOfRangeException) { if (radioButton2.Checked) MessageBox.Show("Your Year Number must be between 1 to 9999", "Error"); if (radioButton4.Checked) MessageBox.Show("سال باید عددی طبیعی و کوچکتر از 9378 باشد", "Error"); } catch (MinusException) { if (radioButton1.Checked || radioButton3.Checked) MessageBox.Show("سال باید مثبت باشد", "Error"); if (radioButton5.Checked) MessageBox.Show("Year must be positive", "Error"); } }