427 votes

Comment obtenir le dernier jour d'un mois ?

Comment trouver le dernier jour du mois en C# ?

Par exemple, si j'ai la date 03/08/1980, comment puis-je obtenir le dernier jour du mois 8 (dans ce cas 31) ?

2 votes

@Mark : Pour quoi faire, si je peux me permettre ? Votre propre réponse ne nécessite pas de méthode d'extension, je pense.

4 votes

Le dernier jour n'est pas spécifique au mois seulement, vous avez besoin de l'année également. Le dernier jour de février 2010 est le 28, mais le dernier jour de février 2008 est le 29.

0 votes

@abatishchev Ce n'est pas le cas. exiger une méthode d'extension, mais la question ne le demande pas vraiment. Cependant, c'est beaucoup plus agréable et beaucoup plus lisible, du moins pour moi, de la voir en une seule. La méthode d'extension était plus une suggestion qu'autre chose. N'importe quelle solution pourrait fonctionner dans une méthode d'extension, pas seulement la mienne.

803voto

Oskar Kjellin Points 8728

Le dernier jour du mois, on obtient comme ceci, ce qui donne 31 :

DateTime.DaysInMonth(1980, 08);

43 votes

Public static DateTime ConvertToLastDayOfMonth(DateTime date) { return new DateTime(date.Year, date.Month, DateTime.DaysInMonth(date.Year, date.Month)) ; } pour obtenir le dernier jour du mois dans un format de date

0 votes

Fonctionne très bien :-)

0 votes

Ou "new DateTime(1980,8,3).AddMonths(1).AddDays(-3) ;". (-3) est le nombre de jours, donc le 0 du mois prochain est en fait le dernier jour du mois en cours.

207voto

Mark Points 5304
var lastDayOfMonth = DateTime.DaysInMonth(date.Year, date.Month);

0 votes

@Henk En fait, j'ai tiré ceci d'un endroit dans notre source qui crée le fichier d'enregistrement de l'utilisateur. DateTime de la lastDayOfMonth . Honnêtement, l'une ou l'autre méthode fonctionne parfaitement bien. C'est un argument pédant pour savoir quelle méthode est la meilleure. Je l'ai fait des deux façons et les deux donnent la même réponse.

82voto

Henk Holterman Points 153608
  DateTime firstOfNextMonth = new DateTime(date.Year, date.Month, 1).AddMonths(1);
  DateTime lastOfThisMonth = firstOfNextMonth.AddDays(-1);

62voto

inspite Points 8872

Si vous voulez le date à un mois et un an près, cela semble correct :

public static DateTime GetLastDayOfMonth(this DateTime dateTime)
{
    return new DateTime(dateTime.Year, dateTime.Month, DateTime.DaysInMonth(dateTime.Year, dateTime.Month));
}

17voto

Radu094 Points 7796

Substraire un jour à partir du premier du mois prochain :

DateTime lastDay = new DateTime(MyDate.Year,MyDate.Month+1,1).AddDays(-1);

Aussi, au cas où vous auriez besoin qu'il fonctionne aussi pour le mois de décembre :

DateTime lastDay = new DateTime(MyDate.Year,MyDate.Month,1).AddMonths(1).AddDays(-1);

13 votes

Votre deuxième ligne de code est bonne, vous devriez supprimer la première afin d'éviter toute confusion.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X