我正在尝试将某个日期转移一定数月,但也要保持同一天(例如,如果日期的日期是星期一,并且在x个月后转移到星期四,我想要也可以从新获得的日期中减去3天。该算法应根据新获得的日期添加/减去天数,基本上提供代表同一天的最近日期。举个例子,如果我的开始日期是10.08.2016(星期三),我加3个月,我将在10.11.2016(星期四),所以最接近当天的星期三是09.11.2016。
到目前为止我设法做的事情看起来像这样:
int startDayOfWeek = ((int)startDay.DayOfWeek) == 0 ? 7 : (int)startDay.DayOfWeek;
int newStartDayOfWeek = ((int)startDay.AddMonths(period).DayOfWeek) == 0 ? 7 : (int)startDay.AddMonths(period).DayOfWeek;
int shiftingDays = startDayOfWeek - newStartDayOfWeek;
if (shiftingDays > 3)
shiftingDays -= 7;
其中startDay是开始日期,句点是我想要转移到的月数。
但这仍然有些失败,所以任何提示都会受到高度赞赏。
此代码失败的示例是: startDate = 01.08.2016(星期一),期间为5 在加入5个月之后,我得到01.01.2017,这是星期日,最接近的星期一将是2017年1月2日,但我得到-6天。
答案 0 :(得分:2)
使用此代码。我们的想法是将天数除以7,然后乘以7。
DateTime endDate = startDay.AddMonths((int)period);
endDate = startDay.AddDays((int)Math.Round((double)(endDate - startDay ).Days / 7)*7);
答案 1 :(得分:0)
这就是你要找的东西吗?
static void Main( string[] args )
{
//DateTime startDay = DateTime.Now;
DateTime startDay = new DateTime( 2016, 8, 1 );
//DateTime startDay = new DateTime( 2016, 8, 10 );
DateTime newDay = startDay.AddMonths( 5 );
int startDayOfWeek = (int)startDay.DayOfWeek;
int newDayOfWeek = (int)newDay.DayOfWeek;
int shift1 = (7 + startDayOfWeek - newDayOfWeek) % 7;
int shift2 = (7 + newDayOfWeek - startDayOfWeek) % 7;
DateTime test = newDay + ((shift1 > shift2) ? - TimeSpan.FromDays( shift2 ) : TimeSpan.FromDays( shift1 ));
}