///<summary>Creates a Hebrew date from an English one.</summary> ///<param name="englishDate">The English date to convert.</param> public HebrewDate(DateTime englishDate) { date = englishDate.Date; hebrewYear = calendar.GetYear(date); hebrewMonth = CalendarExtensions.ToHebrewMonth(hebrewYear, calendar.GetMonth(date)); hebrewDay = calendar.GetDayOfMonth(englishDate); }
///<summary>Gets the length of a Hebrew month.</summary> ///<param name="month">The month.</param> ///<param name="hebrewYear">The year.</param> ///<returns>The number of days in the month.</returns> public static int Length(this HebrewMonth month, int hebrewYear) { if (month == 0) { throw new ArgumentOutOfRangeException("month", "None is not a valid month."); } return(calendar.GetDaysInMonth(hebrewYear, month.Index(hebrewYear))); }
///<summary>Gets the name of the given month in the given Hebrew year.</summary> ///<param name="month">The Hebrew month.</param> ///<param name="hebrewYear">The Hebrew year (for leap years).</param> ///<returns>The name of the month.</returns> public static string ToString(this HebrewMonth month, int hebrewYear) { switch (month) { case 0: throw new ArgumentOutOfRangeException("month", "None is not a valid month."); case HebrewMonth.אדר1: return(calendar.IsLeapYear(hebrewYear) ? "אדר א" : "אדר"); case HebrewMonth.אדר2: return(calendar.IsLeapYear(hebrewYear) ? "אדר ב" : "אדר"); default: return(month.ToString()); } }
///<summary>Creates a Hebrew date.</summary> ///<param name="hebrewYear">The Hebrew year.</param> ///<param name="month">The Hebrew month.</param> ///<param name="day">The Hebrew day of the month.</param> public HebrewDate(int hebrewYear, HebrewMonth month, int day) { if (month == 0) { throw new ArgumentOutOfRangeException("month", "None is not a valid month."); } this.hebrewYear = hebrewYear; if (!calendar.IsLeapYear(hebrewYear) && month == HebrewMonth.אדר1) { month = HebrewMonth.אדר2; } hebrewMonth = month; hebrewDay = day; date = calendar.ToDateTime(hebrewYear, month.Index(hebrewYear), day, 0, 0, 0, 0); }
///<summary>Creates a HebrewDayOfYear.</summary> ///<param name="month">The Hebrew month.</param> ///<param name="day">The Hebrew day.</param> public HebrewDayOfYear(HebrewMonth month, int day) : this() { if (month == HebrewMonth.None) { throw new ArgumentOutOfRangeException("month", "None is not a valid month"); } if (day <= 0) { throw new ArgumentOutOfRangeException("day"); } if (day > 30 || (day == 30 && (month == HebrewMonth.טבת || month == HebrewMonth.אדר2 || month == HebrewMonth.אייר || month == HebrewMonth.תמוז || month == HebrewMonth.אלול))) { throw new ArgumentOutOfRangeException("day"); } Month = month; Day = day; }
///<summary>Creates a NonשבתEvent.</summary> ///<param name="month">The month that the event occurs on.</param> ///<param name="normalDay">The day of the month that this event normally occurs on.</param> ///<param name="fallback">The day of the week that this event occurs on instead of שבת.</param> public NonשבתEvent(HebrewMonth month, int normalDay, DayOfWeek fallback) : this() { if (month == HebrewMonth.None) { throw new ArgumentOutOfRangeException("month", "None is not a valid month"); } if (normalDay <= 0 || normalDay > 30 || (normalDay == 30 && (month == HebrewMonth.טבת || month == HebrewMonth.אדר2 || month == HebrewMonth.אייר || month == HebrewMonth.תמוז || month == HebrewMonth.אלול))) { throw new ArgumentOutOfRangeException("normalDay"); } if (fallback == DayOfWeek.Saturday) { throw new ArgumentOutOfRangeException("fallback", "Fallback cannot be שבת"); } Month = month; NormalDay = normalDay; Fallback = fallback; }
///<summary>Gets the index of a month in year.</summary> ///<param name="month">The name of the month.</param> ///<param name="hebrewYear">The year to check.</param> ///<returns>The month number within the year. (Can be given to .Net HebrewCalendars)</returns> public static int Index(this HebrewMonth month, int hebrewYear) { return(Index(hebrewYear, (int)month)); }
///<summary>Creates a SpecialשבתEvent from a month and day.</summary> ///<param name="month">The month of the earliest date that this שבת can occur.</param> ///<param name="day">The date of the earliest date that this שבת can occur.</param> public SpecialשבתEvent(HebrewMonth month, int day) : this(new HebrewDayOfYear(month, day)) { }
private Holiday(string name, HebrewMonth month, int day, HolidayCategory category) : this(name, new HebrewDayOfYear(month, day), category) { }