Pergunta

Como posso obter a data do último domingo de um ano em C # ?? Vai GregorianCalendar classe ser de ajuda?

Foi útil?

Solução

Eu não sei se existe um método para isso, mas uma maneira simples é verificar os últimos 7 dias de dezembro, a partir de dia 31 e contagem regressiva.

Update: na verdade, se os dias da semana são numerados como esta:

0 Sun, 1 Mon, ... 6 Sat

então

lastSunday = 31 - DayOfWeek(31, 12, 2009) // pseudocode

Outras dicas

Nem a solução mais bonitas, mas deve funcionar:

int year = 2009;
DateTime lastSunday = new DateTime(year, 12, 31);
while (lastSunday.DayOfWeek != DayOfWeek.Sunday)
{
    lastSunday = lastSunday.AddDays(-1);
}

Eu acho que você pode usar a representação inteira da enumeração DayOfWeek para isso:

DateTime endOfYear = new DateTime(DateTime.Now.Year, 12, 31);
DateTime lastSunday = endOfYear.AddDays(-(int)endOfYear.DayOfWeek);

Como a enumeração de DayOfWeek começa em 0 para domingo, isso deve funcionar:

    int Year = 2009;
    DateTime endOfYear = new DateTime(Year, 12, 31);
    DateTime sunday = endOfYear.AddDays(-(int)endOfYear.DayOfWeek); 

Você pode descobrir em que dia da semana 31 de dezembro é. Em seguida, (se não um domingo) calcular volta ...

for (int y=2009; y<=2018; y++)
{
  DateTime dt = new DateTime(y, 12, 31); // last day of year
  dt = dt.AddDays(-(int)dt.DayOfweek); // sun == 0, so then no change
  Console.WriteLine(dt.ToString("dddd dd-MM-yyyy"));
}

Desculpe, mas eu não tenho um C # versão se você ver aqui para a versão VB. Eu suspeito que você vai ser capaz de convertê-lo.

Isso depende ... Você quer o último dia do ano, que é um domingo, ou o domingo da semana passada do ano? Dependendo de como semanas estão determinadas em seu país, a última semana do ano pode ir até seis dias para o próximo ano.

Se você quer o primeiro, você pode simplesmente começar a 31 de dezembro e voltar até encontrar um domingo.

Se você deseja que o segundo, você terá que usar o método System.Globalizartion.Calendar.GetWeekOfYear para descobrir onde a primeira semana das próximas partidas ano, e tirar o dia antes disso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top