public static DateTime NearestQuarterEnd(this DateTime date) {
IEnumerable<DateTime> candidates =
QuartersInYear(date.Year).Union(QuartersInYear(date.Year - 1));
return candidates.Where(d => d < date.Date).OrderBy(d => d).Last();
}
static IEnumerable<DateTime> QuartersInYear(int year) {
return new List<DateTime>() {
new DateTime(year, 3, 31),
new DateTime(year, 6, 30),
new DateTime(year, 9, 30),
new DateTime(year, 12, 31),
};
}
Uso:
DateTime date = new DateTime(2010, 1, 3);
DateTime quarterEnd = date.NearestQuarterEnd();
Este método tiene la ventaja de que si tiene una definición impar de cuartos (por ejemplo, el ejercicio es diferente que el año calendario) el método QuartersInYear
es fácilmente modificado para manejar esto.
Se necesitaría ser capaz de definir sus cuartos cuando comienza y termina. – Paddy
Oh, ese es probablemente solo un caso especial del método 'DoMagic()' que milagrosamente resuelve lo que quieres en cualquier contexto :-). En serio, no existe tal método en la biblioteca de la clase base, pero seguramente puedes escribir el tuyo propio. – Joey
Cuartos estándar –