/// <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)); }
/// <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); }
/// <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)); }