2011-02-14 8 views
6

Estoy un poco atascado sobre este problema. ¿Cómo puedo obtener los valores de sábado de calendario mensual cuando seleccioné una fecha específica?Obtener el valor de la fecha del sábado de una semana seleccionada utilizando un calendario de mes

Por ejemplo: seleccioné el 14 de febrero en el calendario mensual. Después de seleccionarlo habrá un mensaje que contiene el sábado "19 de febrero de 2011" o el 24 de febrero, el mensaje mostrará "26 de febrero de 2011".

enter image description here

Respuesta

11
// This function will return the next saturday for a datetime 
DateTime NextSaturday(DateTime now) 
{ 
    while (now.DayOfWeek != DayOfWeek.Saturday) 
     now = now.AddDays(1); 
    return now; 
} 

ACTUALIZACIÓN

Después de casi 2 años que quieren cambiar esta respuesta.

En estos días nunca crearía una "función de utilidad" para class. Ahora siempre "extiendo" la clase. La firma ahora debe ser DateTime.Next(DayOfWeek). Consulte http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx para obtener más detalles sobre las extensiones.

También la lógica es incorrecta. Si now es un sábado, siempre devolverá la fecha actual. Creo que la mayoría de las personas que llaman esperarán que regrese now + 7 días. Por lo que el primer cambio es:

DateTime NextSaturday(DateTime now) 
{ 
    do { 
     now = now.AddDays(1); 
    } while (now.DayOfWeek != DayOfWeek.Saturday) 

    return now; 
} 

a continuación, cambiar la función de trabajar con cualquier día de la semana:

DateTime Next(DateTime now, DayOfWeek nextDay) 
{ 
    do { 
     now = now.AddDays(1); 
    } while (now.DayOfWeek != nextDay) 

    return now; 
} 

Ahora "extender" la clase DateTime para apoyar siguiente (DayOfWeek)

namespace DateTime.Extensions 
{ 
    public static class DateTimeExtensions 
    { 
    public static DateTime Next(this DateTime now, DayOfWeek nextDay) 
    { 
     do { 
      now = now.AddDays(1); 
     } while (now.DayOfWeek != nextDay) 

     return now; 
     } 
    } 
} 
3
DateTime add = DateTime.Now; //From popup box 
int add = (((int)selected.DayOfWeek) + 1; 
if(add != 7) { 
    selected = selected.AddDays(add); 
} 
+0

@scrum es más eficiente (+1) que mi respuesta (@richard). Pero creo que el mío es más sostenible. –

+1

@ richard-schneider Thx, es casi siempre el movimiento correcto para tomar "mantenible" por sobre "eficiencia" –

Cuestiones relacionadas