示例#1
0
        /// <summary>
        /// Create <see cref="DateInfo"/> by special year, month and offset info.<br />
        /// 根据指定的年月和偏移信息创建 <see cref="DateInfo"/>
        /// </summary>
        /// <param name="year"></param>
        /// <param name="month"></param>
        /// <param name="weekAtMonth"></param>
        /// <param name="dayOfWeek"></param>
        /// <returns></returns>
        public static DateInfo OffsetByWeek(int year, int month, int weekAtMonth, int dayOfWeek)
        {
            if (weekAtMonth == 0 || weekAtMonth > 5)
            {
                throw new ArgumentException("weekAtMonth is invalid.", nameof(weekAtMonth));
            }

            var targetDay = DateTimeCalcHelper.GetTargetDays(year, month, weekAtMonth, dayOfWeek);

            if (targetDay > DateInfo.DaysInMonth(year, month))
            {
                return(DateInfo.InfinitePast);
            }

            return(DateInfoFactory.Create(year, month, targetDay));
        }
示例#2
0
        /// <summary>
        /// Create <see cref="DateInfo"/> by special year, month and offset info.<br />
        /// 根据指定的年月和偏移信息创建 <see cref="DateInfo"/>
        /// </summary>
        /// <param name="year"></param>
        /// <param name="month"></param>
        /// <param name="weekAtMonth"></param>
        /// <param name="dayOfWeek"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        public static bool TryOffsetByWeek(int year, int month, int weekAtMonth, int dayOfWeek, out DateInfo result)
        {
            if (weekAtMonth == 0 || weekAtMonth > 5)
            {
                throw new ArgumentException("weekAtMonth is invalid.", nameof(weekAtMonth));
            }

            var targetDay = DateTimeCalcHelper.GetTargetDays(year, month, weekAtMonth, dayOfWeek);

            var invalid = targetDay > DateTime.DaysInMonth(year, month);

            result = invalid
                ? DateTime.MinValue
                : DateTimeFactory.Create(year, month, targetDay);

            return(!invalid);
        }
示例#3
0
        /// <summary>
        /// Add quarters. <br />
        /// 添加一个季度。
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="months"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        public static DateInfo OffsetByMonths(DateInfo dt, int months, DateTimeOffsetOptions options = DateTimeOffsetOptions.Absolute)
        {
            if (options == DateTimeOffsetOptions.Absolute)
            {
                return(dt + months.Months());
            }

            var(year, month) = DateTimeCalcHelper.Calc(dt.Year, dt.Month, months);

            var firstDayOfMonth = dt.SetDate(year, month, 1);

            var lastDayOfMonth = firstDayOfMonth.LastDayOfMonth().Day;

            var day = dt.Day > lastDayOfMonth ? lastDayOfMonth : dt.Day;

            return(dt.SetDate(year, month, day));
        }