2010-03-09 7 views
27

Normalement, j'utilise le code ci-dessous, mais existe-t-il un meilleur moyen?Dernier jour du mois dans .NET

lastOfMonth = new DateTime(Now.Year, Now.Month, 1).AddMonths(1).AddDays(-1) 
+3

Définir "mieux". –

+0

Je pense que seule une fonction fournie par l'API ferait un meilleur travail. –

+1

Voulez-vous une heure précise? Si non, vous devriez utiliser Aujourd'hui, pas maintenant. –

Répondre

49

J'utilise

DateTime now = DateTime.Today; 
var lastDate = new DateTime(now.Year, now.Month, DateTime.DaysInMonth(now.Year, now.Month)); 
8
DateTime(year, month, DateTime.DaysInMonth(year, month)). 
3

Vous pouvez utiliser CultureInfo.CurrentCulture.Calendar.GetDaysInMonth (Now.Year, Now.Month)

12

Je probablement utiliser DaysInMonth comme il fait le code un peu plus lisible et plus facile à comprendre (même si, j'aime beaucoup votre astuce :-)). Cette requieres une ammount similaire de frappe (ce qui est beaucoup), donc je définirait probablement une méthode d'extension:

DateTime LastDayOfMonth(this DateTime) { 
    var days = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); 
    return new DateTime(DateTime.Now.Year, DateTime.Now.Month, days); 
} 

Maintenant, nous pouvons utiliser DateTime.Now.LastDayOfMonth() qui ressemble beaucoup mieux :-).

2

Voici comment vous pouvez obtenir le nombre de jours du mois en utilisant Noda Time:

int days = CalendarSystem.Iso.GetDaysInMonth(year, month); 

Assez simple, hein? Eh bien, cela suppose que vous connaissez l'année et le mois dont vous parlez. Si vous voulez pour le mois en cours, et dans le fuseau horaire du système , alors vous devez spécifier explicitement, comme ceci:

DateTimeZone tz = DateTimeZoneProviders.Tzdb.GetSystemDefault(); 
LocalDate localDate = SystemClock.Instance.Now.InZone(tz).Date; 
int days = localDate.Calendar.GetDaysInMonth(localDate.Year, localDate.Month); 

temps Noda vous fait intentionnellement penser à ces choses, au lieu de juste faire les hypothèses que DateTime.Now ou DateTime.Today faire.

Questions connexes