[英]Skip Sat and Sunday and get the date by from the current date in ASP.NET?
我正在使用以下代码跳过周六和周日,只获取特定小时数的工作日,这实际上是我的任务:
我有一个项目和完成该项目的具体时间,现在我只想显示项目完成的日期。
我的代码是:
DateTime date = DateTime.Now;
Int32 d = 1;
Int32 result = 260 / 8;
for (d = 0; d <= result; d++)
{
if (date.DayOfWeek.ToString() == "Saturday" || date.DayOfWeek.ToString() == "Sunday")
{
d = d - 1;
date = date.AddDays(1);
}
else
{
date = date.AddDays(1);
}
}
lbldate.Text = date.ToString();
它的正常工作时间为30天(天数为32天,然后日期应为:2013年11月25日,但即将于2013年11月26日)。
请告诉我我在哪里犯错。
一个可行的解决方案是:
DateTime endDate = DateTime.Now;
double remainingAmountOfWorkingDays = Math.Round(260d / 8d);
while (remainingAmountOfWorkingDays > 0)
{
endDate = endDate.AddDays(1);
if (endDate.DayOfWeek == DayOfWeek.Saturday || endDate.DayOfWeek == DayOfWeek.Sunday)
continue;
Console.WriteLine(remainingAmountOfWorkingDays +" "+endDate.ToString("dddd dd.MM.yyyy"));
remainingAmountOfWorkingDays--;
}
也许有一些更优雅的方法,但是它可以工作并且不需要循环:
public static DateTime GetDateIn(int numWorkingHours)
{
int numDays = numWorkingHours / 8;
DateTime date = DateTime.Now;
// normalize to monday
if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
date = date.AddDays(date.DayOfWeek == DayOfWeek.Sunday ? 1 : 2);
int weeks = numDays / 5;
int remainder = numDays % 5;
date = date.AddDays(weeks * 7 + remainder);
// normalize to monday
if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
date = date.AddDays(date.DayOfWeek == DayOfWeek.Sunday ? 1 : 2);
return date;
}
而不是从d变量中减去
如果是假日星期六或星期日,请使用以下代码
date.Subtract(new TimeSpan(1, 0, 0, 0)); // where 1 is day count you need to subtract
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.