2008-10-03 28 views
10

¿Cuál es la forma más fácil de calcular la cantidad de días hábiles desde una fecha? VB.NET preferido, pero C# está bien..NET Fecha de comparación: contar la cantidad de días hábiles desde una fecha?

Y por "días hábiles", me refiero a todos los días excepto sábados y domingos. Si el algoritmo también puede tener en cuenta una lista de fechas de 'exclusión' específicas que no deberían contar como días hábiles, sería gravy.

Gracias de antemano por el genio contribuido.

Respuesta

16

Esto hará lo que usted quiera. Debe ser lo suficientemente fácil para convertir a VB.NET, sin embargo, ha sido demasiado tiempo para poder hacerlo.

DateTime start = DateTime.Now; 
DateTime end = start.AddDays(9); 
IEnumerable<DateTime> holidays = new DateTime[0]; 

// basic data 
int days = (int)(end - start).TotalDays; 
int weeks = days/7; 

// check for a weekend in a partial week from start. 
if (7- (days % 7) <= (int)start.DayOfWeek) 
    days--; 
if (7- (days % 7) <= (int)start.DayOfWeek) 
    days--; 

// lose the weekends 
days -= weeks * 2; 

foreach (DateTime dt in holidays) 
{ 
    if (dt > start && dt < end) 
     days--; 
} 
1

Here's método para SQL Server. También hay un método vbscript en la página. No es exactamente lo que pediste, lo sé.

13

La forma más sencilla es probablemente algo así como

DateTime start = new DateTime(2008, 10, 3); 
DateTime end = new DateTime(2008, 12, 31); 
int workingDays = 0; 
while(start < end) { 
    if(start.DayOfWeek != DayOfWeek.Saturday 
    && start.DayOfWeek != DayOfWeek.Sunday) { 
     workingDays++; 
    } 
    start = start.AddDays(1); 
} 

Puede que no sea el más eficiente pero sí permite la fácil comprobación de una lista de días.

+0

¿Quiere decir la comprobación de los fines de semana. No vacaciones : D – ferventcoder

+1

Me imagino que quiso decir que este algoritmo particular haría que fuera sencillo verificar una lista de días festivos desde el ciclo, si así lo desea. – Nathan

3

DateDiff junto con a few other Date* functions son exclusivos de VB.NET y, a menudo, el tema de la envidia de los desarrolladores de C#. Sin embargo, no estoy seguro de que sea muy útil en este caso.

1

Combinamos dos artículos de CodeProject para llegar a una solución completa. Nuestra biblioteca no es lo suficientemente conciso como para publicar como código fuente, pero puedo indicarle los dos proyectos que utilizamos para lograr lo que necesitábamos. Como siempre con los artículos de CodeProject, lea los comentarios, puede haber información importante en ellos.

Cálculo de días hábiles: http://www.codeproject.com/KB/cs/busdatescalculation.aspx

Un negocio alternativo día Calc: http://www.codeproject.com/KB/cs/datetimelib.aspx

turismo Cálculo: http://www.codeproject.com/KB/dotnet/HolidayCalculator.aspx

1

en general (sin código) -

  • restar las fechas para obtener el número de días
  • dividir por 7 para obtener el número de semanas
  • número
  • reste de semanas Tiempos 2
  • cuentan el número de fechas de vacaciones que caen con el intervalo de fechas
  • de resta que cuentan

violín con el inicio/fechas de finalización para que caigan lunes a lunes, a continuación, añadir de nuevo la diferencia

[disculpas por las generalidades sin código, que es tarde]

[cf. endDate.Subtract (startDate) .TotalDays]

3

Este es un ejemplo de la fórmula de Steve en VB sin la sustracción de vacaciones:

Function CalcBusinessDays(ByVal DStart As Date, ByVal DEnd As Date) As Decimal 

     Dim Days As Decimal = DateDiff(DateInterval.Day, DStart, DEnd) 
     Dim Weeks As Integer = Days/7 
     Dim BusinessDays As Decimal = Days - (Weeks * 2) 
     Return BusinessDays 
     Days = Nothing 
     Weeks = Nothing 
     BusinessDays = Nothing 

End Function 
Cuestiones relacionadas