@ Mark: O que posso perguntar? Sua própria resposta não requer um método de extensão, eu acho.
abatishchev
4
O último dia não é específico apenas para o mês, você também precisa do ano. O último dia de fevereiro de 2010 é 28, mas o último dia de fevereiro de 2008 é 29.
Guffa 22/03/10
@abatishchev Não requer um método de extensão, mas a pergunta realmente não é solicitada. No entanto, é muito melhor e muito mais legível, pelo menos para mim, vê-lo um. O método de extensão foi mais uma sugestão do que qualquer coisa. Qualquer solução funcionaria em um método de extensão, não apenas no meu.
Mark
Respostas:
657
O último dia do mês em que você fica assim, retorna 31:
public estático DateTime ConvertToLastDayOfMonth (DateTime date) {retorna novo DateTime (date.Year, date.Month, DateTime.DaysInMonth (date.Year, date.Month)); } para obter o último dia do mês em um formato de data
regisbsb
177
var lastDayOfMonth =DateTime.DaysInMonth(date.Year, date.Month);
@ Henk Na verdade, eu puxei isso de um lugar em nossa fonte que cria o DateTimede lastDayOfMonth. Honestamente, de qualquer maneira funciona perfeitamente bem. É um argumento pedante de que maneira é melhor. Eu fiz isso de duas maneiras e ambas produzem a mesma resposta.
Mark
37
Se você quer a data , dado um mês e um ano, isso parece correto:
Você pode encontrar a última data de qualquer mês por este código:
var now =DateTime.Now;var startOfMonth =newDateTime(now.Year, now.Month,1);varDaysInMonth=DateTime.DaysInMonth(now.Year, now.Month);var lastDay =newDateTime(now.Year, now.Month,DaysInMonth);
Está me perguntando que, em vez de um método simples: DateTime.DaysInMonthpor que alguém deveria procurar essa maneira ilegível e complexa de alcançá-la !? - Mas como uma solução válida é aceitável;).
Para obter o último dia do mês em um calendário específico - e em um método de extensão -:
publicstaticintDaysInMonthBy(thisDateTime src,Calendar calendar){var year = calendar.GetYear(src);// year of src in your calendarvar month = calendar.GetMonth(src);// month of src in your calendarvar lastDay = calendar.GetDaysInMonth(year, month);// days in month means last day of that month in your calendarreturn lastDay;}
// Use any date you want, for the purpose of this example we use 1980-08-03.var myDate =newDateTime(1980,8,3);var lastDayOfMonth =newDateTime(myDate.Year, myDate.Month,DateTime.DaysInMonth(myDate.Year, myDate.Month));
Essa resposta responde apenas ao exemplo do questionador. Uma resposta mais abrangente seria mais útil.
Scott Lawrence
Você pode usar qualquer data que desejar como valor de entrada, para poder aplicar esta solução a qualquer data que desejar.
Jasper Risseeuw 15/10/1918
1
Ele falhará em algumas datas, tente var myDate = new DateTime(1980, 1, 31);(retorna o dia 29) #
501 Hans
Hans Keing, você está certo. Este método falhará se o próximo mês tiver menos dias que o atual. Eu acho que a maneira mais fácil é usar DateTime.DaysInMonth (), mas essa é a resposta aceita, então minha resposta deve ser excluída.
Jasper Risseeuw 15/10/1918
-1
Eu não sei C #, mas, se não houver uma maneira conveniente de obter API, uma das maneiras de fazer isso é seguindo a lógica:
today ->+1 month ->set day of month to 1->-1 day
Obviamente, isso pressupõe que você tenha a matemática da data desse tipo.
Respostas:
O último dia do mês em que você fica assim, retorna 31:
fonte
fonte
DateTime
delastDayOfMonth
. Honestamente, de qualquer maneira funciona perfeitamente bem. É um argumento pedante de que maneira é melhor. Eu fiz isso de duas maneiras e ambas produzem a mesma resposta.Se você quer a data , dado um mês e um ano, isso parece correto:
fonte
Subtraia um dia a partir do primeiro mês que vem:
Além disso, caso você também precise trabalhar para dezembro:
fonte
Você pode encontrar a última data de qualquer mês por este código:
fonte
Você pode encontrar o último dia do mês por uma única linha de código:
fonte
DateTime.DaysInMonth
por que alguém deveria procurar essa maneira ilegível e complexa de alcançá-la !? - Mas como uma solução válida é aceitável;).De
DateTimePicker:
Primeiro encontro:
Última data:
fonte
Para obter o último dia do mês em um calendário específico - e em um método de extensão -:
fonte
fonte
var myDate = new DateTime(1980, 1, 31);
(retorna o dia 29) #Eu não sei C #, mas, se não houver uma maneira conveniente de obter API, uma das maneiras de fazer isso é seguindo a lógica:
Obviamente, isso pressupõe que você tenha a matemática da data desse tipo.
fonte