2010-11-09 38 views
6

tengo una, por ejemplo, la fecha "2010-11-09 , Thuesday"Obtener el lunes y el domingo para una cierta DateTime en C#

Ahora quiero conseguir la fecha y hora de los lunes y los domingos ¿En qué consiste la fecha indicada anteriormente.

¿Cómo harías eso?

+0

@Lisa; ¿Quiere decir que quiere las fechas del lunes y el domingo que son la semana de ese martes? – BeemerGuy

+0

@Beemer: con la convención de que la semana comienza el domingo eso no funcionaría. –

+0

@Hank; Sí lo haría. OP puede querer recuperar el domingo que comienza la semana del martes. Cualquier lógica es posible siempre que no sepamos exactamente qué es lo que quieren. Verifique la respuesta a continuación con el cartel "luz" que hace eso. – BeemerGuy

Respuesta

36

Esta es probaly lo que está buscando:

DateTime date = DateTime.Today; 

// lastMonday is always the Monday before nextSunday. 
// When date is a Sunday, lastMonday will be tomorrow.  
int offset = date.DayOfWeek - DayOfWeek.Monday;  
DateTime lastMonday = date.AddDays(-offset); 
DateTime nextSunday = lastMonday.AddDays(6); 

Editar: desde lastMonday no siempre es lo que sugiere el nombre (ver los comentarios), el siguiente de una sola línea es probablemente más al punto :

DateTime nextSunday = date.AddDays(7 - (int) date.DayOfWeek); 
+0

buena solución, mucho más limpia que la mía. – light

+3

Esto tiene dos errores, un error tipográfico en Monday.AddDays ... debe ser minúscula 'm' para el lunes. También para obtener el domingo a partir del lunes, agregaría 6 días, no 7. Agregando siete días, le da el siguiente lunes. – Banford

+3

Esto tiene otro error. Si Hoy es domingo, volverá el próximo lunes (desplazamiento = -1) en lugar del último lunes. Emitir como un entero El domingo devolverá 0 y el lunes devolverá 1, por lo que de domingo a lunes = -1. Agregando esta línea, lo arreglará: offset = (offset <0)? 6: desplazamiento; – gijswijs

0

Algo como esto, por supuesto que se desea romper el bucle en algún momento antes de la DateTime.MaxValue, pero esto se debe hacer:

DateTime dt = DateTime.Parse("2010-11-09, Thuesday"); 


     while (dt < DateTime.MaxValue) 
     { 

      if(dt.DayOfWeek == DayOfWeek.Sunday || dt.DayOfWeek == DayOfWeek.Monday) 
       Console.WriteLine(dt.ToString()); 
      dt.AddDays(1); 
     } 
0

DateTime = Lunes DateTime.Now.AddDays ((DateTime.Now.DayOfWeek - 1) * -1) .Fecha;

DateTime Domingo = DateTime.Now.AddDays (7 -DateTime.Now.DayOfWeek) .Date;

+1

No creo que esto funcione el domingo. ¿No recibirías mañana y el próximo domingo que no se uniría hoy (domingo)? (0-1) * - 1 = 1, 7-0 = 7. –

0

es fácil si se utiliza un método condicional

if (v_datetime.DayOfWeek== DayOfWeek.Sunday) 
{ 
return true; 
} 

if (v_datetime.DayOfWeek== DayOfWeek.Monday) 
{ 

} 
+0

por favor actualice su respuesta para proporcionar una respuesta completa a la pregunta original en lugar de simplemente responder al comentario de alguien. – Mike

0
/// <summary> 
/// Returns the day that is the specific day of week of the input day. 
/// </summary> 
/// <param name="input">The input day.</param> 
/// <param name="dayOfWeek">0 is Monday, 6 is Sunday.</param> 
/// <returns></returns> 
public static DateTime GetDayOfWeekOfSpecific(DateTime input, int dayOfWeek) 
{ 
    if(input.DayOfWeek == DayOfWeek.Sunday) 
    { 
     dayOfWeek -= 7; 
    } 
    // lastMonday is always the Monday before nextSunday. 
    // When today is a Sunday, lastMonday will be tomorrow.  
    int offset = input.DayOfWeek - DayOfWeek.Monday; 
    DateTime lastMonday = input.AddDays(-offset); 
    DateTime nextDayOfWeek = lastMonday.AddDays(dayOfWeek); 
    return nextDayOfWeek; 
} 
Cuestiones relacionadas