コード例 #1
0
        private static DateTime GetWorkingDayBefore(DateTime day, int days)
        {
            if (days < 0)
            {
                return(GetWorkingDayAfter(day, -days));
            }
            DayArray dayArray = GetWorkingDays(day.Year);
            int      index    = dayArray.IndexOf(day);

            if (index > 0)
            {
                if (index - days >= 0)
                {
                    return(dayArray[index - days]);
                }
                return(GetLastYearWorkingDay(day.Year - 1, days - index - 1));//xiaoguohua:return GetLastYearWorkingDay(day.Year - 1, days - index)
            }
            index = ~index;
            if (index == 0)
            {
                return(GetLastYearWorkingDay(day.Year - 1, days));
            }
            index--;
            if (index - days >= 0)
            {
                return(dayArray[index - days]);
            }
            return(GetLastYearWorkingDay(day.Year - 1, days - index - 1));
        }
コード例 #2
0
        private static int GetWorkingDays(DateTime day1, DateTime day2)
        {
            if (day1 == day2)
            {
                return(0);
            }
            // 算以前的工作日数
            if (day2 < day1)
            {
                return(-GetWorkingDays(day2, day1));
            }
            DayArray dayArray = GetWorkingDays(day1.Year);
            int      index0   = dayArray.IndexOf(day1);

            if (index0 < 0)
            {
                index0 = ~index0;
            }
            // 跨年
            if (day2.Year > day1.Year)
            {
                return(GetNextYearWorkingDays(dayArray.Length - index0 - 1, day1.Year + 1, day2));
            }
            // 当年
            int index1 = dayArray.IndexOf(day2);

            if (index1 < 0)
            {
                index1 = ~index1;
                index1--;
            }
            return(index1 - index0);
        }
コード例 #3
0
        /// <summary>
        /// 获取指定年月节气日期表。
        /// </summary>
        /// <param name="year">年。</param>
        /// <param name="month">月。</param>
        /// <returns>返回日期数集合。</returns>
        public static int[] GetSolarTeamDays(int year, int month)
        {
            DayArray dayArray = GetSolarTeamDays(year);
            DateTime d1       = dayArray[(month - 1) * 2];
            DateTime d2       = dayArray[(month - 1) * 2];

            return(new int[] { d1.Day, d2.Day });
        }
コード例 #4
0
        private static DateTime GetLastYearWorkingDay(int year, int days)
        {
            DayArray dayArray = GetWorkingDays(year);

            if (dayArray.Length - days > 0)
            {
                return(dayArray[dayArray.Length - days - 1]);
            }
            return(GetLastYearWorkingDay(year - 1, days - dayArray.Length));
        }
コード例 #5
0
        private static int GetNextYearWorkingDays(int radix, int year, DateTime day)
        {
            DayArray dayArray = GetWorkingDays(year);

            if (day.Year > year)
            {
                return(GetNextYearWorkingDays(dayArray.Length + radix, year + 1, day));
            }
            int index = dayArray.IndexOf(day);

            if (index < 0)
            {
                index = ~index;
                return(radix + index);
            }
            return(radix + index + 1);
        }
コード例 #6
0
        private static DateTime GetWorkingDayAfter(DateTime day, int days)
        {
            if (days < 0)
            {
                return(GetWorkingDayBefore(day, -days));
            }
            DayArray dayArray = GetWorkingDays(day.Year);
            int      index    = dayArray.IndexOf(day);

            if (index < 0)
            {
                index = ~index;
            }
            int remains = dayArray.Length - index;

            if (days >= remains)
            {
                // 合理假设:每年元月1日总是非工作日
                return(GetWorkingDayAfter(new DateTime(day.Year + 1, 1, 1), days - remains));
            }
            return(dayArray[index + days]);
        }
コード例 #7
0
            private DateTime GetSolarTeamDay(int year, int index)
            {
                DayArray days = GetSolarTeamDays(year);

                return(days[index]);
            }