示例#1
0
        public BadiDate GetBadiDate(DateTime gSourceDate, RelationToSunset relationToSunset)
        {
            // strip off time
            gSourceDate = gSourceDate.Date;
            var bDayRelationToMidnight = relationToSunset == RelationToSunset.gAfterSunset
        ? RelationToMidnight.bEvePrior_AfterSunset_Frag1
        : RelationToMidnight.bDay_BeforeSunset_Frag2;

            if (relationToSunset == RelationToSunset.gAfterSunset)
            {
                gSourceDate = gSourceDate.AddDays(1);
            }

            var gYear          = gSourceDate.Year;
            var gDayOfNawRuz   = GetNawRuz(gYear, true);
            var gDayLoftiness1 = gDayOfNawRuz.AddDays(-19);

            var bYear = gYear - (gSourceDate >= gDayOfNawRuz ? 1843 : 1844);
            int bMonth;
            int bDay;

            var isBeforeLoftiness = gSourceDate < gDayLoftiness1;

            if (isBeforeLoftiness)
            {
                // back: Jan --> end of AyyamiHa
                var gDayLoftiness1LastYear         = GetNawRuz(gYear - 1, true).AddDays(-19);
                var daysAfterLoftiness1LastYear    = (int)Math.Round((gSourceDate - gDayLoftiness1LastYear).TotalDays);
                var numMonthsFromLoftinessLastYear = (int)Math.Floor(daysAfterLoftiness1LastYear / 19D);

                bDay   = 1 + daysAfterLoftiness1LastYear - numMonthsFromLoftinessLastYear * 19;
                bMonth = numMonthsFromLoftinessLastYear;

                if (bMonth == 19)
                {
                    bMonth = 0;
                }
            }
            else
            {
                // forward: Loftiness --> Dec
                var bDaysAfterLoftiness1    = (int)Math.Round((gSourceDate - gDayLoftiness1).TotalDays);
                var bNumMonthsFromLoftiness = (int)Math.Floor(bDaysAfterLoftiness1 / 19D);

                bDay   = 1 + bDaysAfterLoftiness1 - bNumMonthsFromLoftiness * 19;
                bMonth = bNumMonthsFromLoftiness;

                if (bMonth == 0)
                {
                    bMonth = 19;
                }
            }

            return(new BadiDate(bYear, bMonth, bDay, bDayRelationToMidnight));
        }
示例#2
0
        /// <summary>
        /// This day, at sunset
        /// </summary>
        /// <param name="input"></param>
        /// <param name="forceRelationToSunset"></param>
        /// <returns></returns>
        public DateTime AtSunset(DateTime input, RelationToSunset forceRelationToSunset = RelationToSunset.Undefined)
        {
            // not actually calculating for now...

            var minute = DefaultSunsetMinute;

            switch (forceRelationToSunset)
            {
            case RelationToSunset.gBeforeSunset:
                minute--;
                break;

            case RelationToSunset.gAfterSunset:
                minute++;
                break;
            }
            return(new DateTime(input.Year, input.Month, input.Day, DefaultSunsetHour, minute, 0));
        }
示例#3
0
 public void GetBadiDate_AfterNawRuz(int gYear, int gMonth, int gDay, RelationToSunset relationToSunset, int bYear,
                                     int bMonth, int bDay, RelationToMidnight relationToMidnight)
 {
     _badi.GetBadiDate(new DateTime(gYear, gMonth, gDay), relationToSunset)
     .ShouldBe(new BadiDate(bYear, bMonth, bDay, relationToMidnight));
 }