我一直在尝试为我的应用程序使用ajax CalenderExtender。
我的应用程序中有许多小操作,例如添加任务的开始日期以查找完成日期,更改任务的结束日期(取决于其开始日期)等等。
但是,当我做所有这些操作时,我想跳过所有假期和星期六,星期日,从例如的计算。从2014年1月23日开始,持续时间为5天的任务应于2014年1月29日完成(为持续时间的持续时间增加2天),而不是01/27/2014。同样也应该对其他操作执行。
有办法做到这一点吗?
答案 0 :(得分:3)
对于星期日和星期六,这很容易。只需查看日期的DateTime.DayOfWeek
属性即可。
如果您的操作将在约会start
开始并且将在约会end
结束,您可以查看星期六或星期日的日期:
List<DateTime> satsAndSundays;
for (DateTime temp = start; temp <= end; temp.AddDays(1))
{
if (temp.DayOfWeek == DayOfWeek.Sunday ||
temp.DayOfWeek == DayOfWeek.Saturday)
{
satsAndSundays.add(temp);
}
}
由于你可以通过以下方式知道start
和end
之间有多少天:
TimeSpan span = end - start;
int totalDays = (int)span.TotalDays;
// TotalDays is actually a double, I'm just discarding the non integer part.
您可以通过totalDays - satsAndSundays.Count
来填补您在那里工作的天数。
编辑:我刚刚再次阅读了这个问题。如果您希望任务在指定日期开始,并且需要x
个工作日,您可以这样做:
DateTime end = start;
for (int i = x; i >= 0;) // the third parameter of the for is empty on purpose
{
end = end.AddDays(1);
if (end.DayOfWeek != DayOfWeek.Saturday &&
end.DayOfWeek != DayOfWeek.Sunday)
{
i--;
}
}
如果循环,end
将x
start
{{1}}之后的工作日(假设中间没有假期)。
但是对于假期来说,框架中没有这样的算法。您需要从某些来源(文件,数据库,Web服务等)获取它们。或者你可以编写自己的程序来计算它们 - 大多数不在固定日期的假期在它们发生时会遵循公式。但请注意,假期可能因文化和地区而异。例如,如果您的应用程序要在整个国家/地区使用,那么实施全市范围的假期可能需要付出相当大的努力。根据您的需要,让用户输入哪些天假期,或者让您的应用可以访问和使用您自己的数据库,甚至可能更好。
答案 1 :(得分:1)
试试这个..
private string GetDatesOfSundays(DateTime DatMonth)
{
string sReturn = "";
int iDayOffset = DatMonth.Day - 1;
DatMonth = DatMonth.AddDays(System.Convert.ToDouble(-DatMonth.Day + 1));
DateTime DatMonth2 = DatMonth.AddMonths(1).AddDays(System.Convert.ToDouble(-1));
while (DatMonth < DatMonth2)
{
if (DatMonth.DayOfWeek == System.DayOfWeek.Sunday)
{
if (sReturn.Length > 0) sReturn += ",";
sReturn += DatMonth.ToShortDateString();
}
DatMonth = DatMonth.AddDays(1.0);
}
return sReturn;
}