Lo que quiero hacer es crear un calendario simple, y quiero encontrar el primer día de la primera semana de un mes específico. Mi calendario es de lunes a domingo y el siguiente código funciona, pero como pueden ver, no es tan agradable. Alguien tiene una mejor idea sobre cómo obtener la primera fecha en el calendario.Encontrar el primer día del calendario
var now = new DateTime(Year, Month, 1);
now = now.AddDays(1-(int)now.DayOfWeek);
now = now.Day > 15 ? now : now.AddDays(-7);
El calendario va a terminar con este aspecto:
| < | Jan 2011 | > |
------------------------------------
| Mo | Tu | We | Th | Fr | Sa | Su |
|[27]| 28 | 29 | 30 | 31 | 01 | 02 |
| 03 | 04 | 05 | 06 | 07 | 08 | 09 |
| .. | .. | .. | .. | .. | .. | .. |
| .. | .. | .. | .. | .. | .. | .. |
| 31 | 01 | 02 | 03 | 04 | 05 | 06 |
Y en esta "imagen" que es la [27] fecha en la que yo estoy tratando de encontrar.
Solución (encontrado que es mejor/más limpio para recorrer luego calcular):
public DateTime FirstDay()
{
var date = new DateTime(Date.Year, Date.Month, 1);
while (true)
{
if (date.DayOfWeek == DayOfWeek.Monday)
return date;
date = date.AddDays(-1);
}
return date;
}
public DateTime LastDay()
{
var date = new DateTime(Date.Year, Date.Month,
DateTime.DaysInMonth(Date.Year, Date.Month));
while (true)
{
if (date.DayOfWeek == DayOfWeek.Sunday)
return date;
date = date.AddDays(1);
}
return date;
}
/BR Andreas
+1, por el arte ASCII. –
+1 #wow, De hecho hice un Calendario similar en una aplicación de consola con C en mi Colegio. –