@Mark: Pour quoi puis-je demander? Je pense que votre propre réponse ne nécessite pas de méthode d'extension.
abatishchev
4
Le dernier jour n'est pas spécifique au mois seulement, vous avez également besoin de l'année. Le dernier jour de février 2010 est le 28, mais le dernier jour de février 2008 est le 29.
Guffa
@abatishchev Il ne nécessite pas de 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, d'en voir un. La méthode d'extension était plus une suggestion qu'autre chose. Toute solution fonctionnerait dans une méthode d'extension, pas seulement la mienne.
Mark
Réponses:
657
Le dernier jour du mois, vous obtenez comme ceci, qui renvoie 31:
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
regisbsb
177
var lastDayOfMonth =DateTime.DaysInMonth(date.Year, date.Month);
@Henk En fait, j'ai tiré cela d'un endroit dans notre source qui crée le à DateTimepartir du lastDayOfMonth. Honnêtement, dans les deux cas, cela fonctionne parfaitement bien. C'est un argument pédant qui est le meilleur. Je l'ai fait dans les deux sens et les deux donnent la même réponse.
Mark
37
Si vous voulez la date , compte tenu d'un mois et d'un an, cela semble juste:
Vous pouvez trouver la dernière date d'un mois par ce code:
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);
Je me demande qu'au lieu d'une méthode simple:, DateTime.DaysInMonthpourquoi quelqu'un devrait chercher cette manière illisible et complexe pour y parvenir!? - Mais comme une solution valable est acceptable;).
Pour obtenir le dernier jour d'un mois dans un calendrier spécifique - et dans une méthode d'extension -:
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));
Cette réponse ne répond qu'à l'exemple du questionneur. Une réponse plus complète serait plus utile.
Scott Lawrence
Vous pouvez utiliser la date de votre choix comme valeur d'entrée, vous pouvez donc appliquer cette solution à la date de votre choix.
Jasper Risseeuw
1
Il échouera pour certaines dates, essayez var myDate = new DateTime(1980, 1, 31);(retourne le 29)
Hans Ke st ing
Hans Keing, vous avez raison. Cette méthode échouera si le mois suivant a moins de jours que le jour actuel. Je suppose que le moyen le plus simple est d'utiliser DateTime.DaysInMonth () mais c'est la réponse acceptée, donc ma réponse doit être supprimée.
Jasper Risseeuw du
-1
Je ne connais pas C # mais, s'il s'avère qu'il n'y a pas de moyen API pratique pour l'obtenir, l'une des façons de le faire est de suivre la logique:
today ->+1 month ->set day of month to 1->-1 day
Bien sûr, cela suppose que vous ayez des mathématiques de date de ce type.
Réponses:
Le dernier jour du mois, vous obtenez comme ceci, qui renvoie 31:
la source
la source
DateTime
partir dulastDayOfMonth
. Honnêtement, dans les deux cas, cela fonctionne parfaitement bien. C'est un argument pédant qui est le meilleur. Je l'ai fait dans les deux sens et les deux donnent la même réponse.Si vous voulez la date , compte tenu d'un mois et d'un an, cela semble juste:
la source
Soustrayez une journée du premier du mois prochain:
De plus, au cas où vous en auriez besoin pour travailler aussi en décembre:
la source
Vous pouvez trouver la dernière date d'un mois par ce code:
la source
Vous pouvez trouver le dernier jour du mois par une seule ligne de code:
la source
DateTime.DaysInMonth
pourquoi quelqu'un devrait chercher cette manière illisible et complexe pour y parvenir!? - Mais comme une solution valable est acceptable;).De
DateTimePicker:
Premier rendez-vous:
Dernier rendez-vous:
la source
Pour obtenir le dernier jour d'un mois dans un calendrier spécifique - et dans une méthode d'extension -:
la source
la source
var myDate = new DateTime(1980, 1, 31);
(retourne le 29)Je ne connais pas C # mais, s'il s'avère qu'il n'y a pas de moyen API pratique pour l'obtenir, l'une des façons de le faire est de suivre la logique:
Bien sûr, cela suppose que vous ayez des mathématiques de date de ce type.
la source