2010-03-22 13 views
209

Come posso trovare l'ultimo giorno del mese in C#?Come si ottiene l'ultimo giorno del mese?

Ad esempio, se ho la data 03/08/1980, come ottengo l'ultimo giorno del mese 8 (in questo caso 31)?

+2

@ Mark: Che cosa posso chiedere? La tua risposta non richiede un metodo di estensione, credo. – abatishchev

+4

L'ultimo giorno non è specifico solo per il mese, è necessario anche l'anno. L'ultimo giorno di febbraio 2010 è 28, ma l'ultimo giorno di febbraio 2008 è il 29. – Guffa

+0

@abatishchev Non richiede _questione un metodo di estensione, ma la domanda in realtà non lo richiede. Tuttavia, è molto più bello e molto più leggibile, almeno per me, vederlo. Il metodo di estensione era più di un suggerimento che altro. Qualsiasi soluzione funzionerebbe in un metodo di estensione, non solo mio. – Mark

risposta

414

L'ultimo giorno del mese che si ottiene in questo modo, che restituisce 31:

DateTime.DaysInMonth(1980, 08); 
+14

public static DateTime ConvertToLastDayOfMonth (DateTime date) { return new DateTime (date.Year, date.Month, DateTime.DaysInMonth (date.Year, date.Month)); } per ottenere l'ultimo giorno del mese in un formato data – regisbsb

65
DateTime firstOfNextMonth = new DateTime(date.Year, date.Month, 1).AddMonths(1); 
DateTime lastOfThisMonth = firstOfNextMonth.AddDays(-1); 
+1

"Come ottenere l'ultimo giorno di un mese?". DateTime.DaysInMonth (anno, mese) restituirà quanti giorni ci sono nel mese, questo restituirà la stessa risposta per "qual è l'ultimo giorno del mese". La tua strada funziona, ma penso che sia troppo codice per una cosa semplice. – rochasdv

9

Sottrarre al giorno a partire dal primo giorno del mese successivo:

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

Inoltre, in caso di necessità di lavorare per dicembre anche:

DateTime lastDay = new DateTime(MyDate.Year,MyDate.Month,1).AddMonths(1).AddDays(-1); 
138
var lastDayOfMonth = DateTime.DaysInMonth(date.Year, date.Month); 
+0

@Henk In realtà l'ho estratto da un punto della nostra origine che crea il 'DateTime' da 'lastDayOfMonth'. Onestamente, in entrambi i casi funziona perfettamente. È un argomento pedante in che modo è meglio. L'ho fatto in entrambi i modi ed entrambi hanno ottenuto la stessa risposta. – Mark

+0

Mark, no.Il tuo risultato è un 'int', mio ​​un' DateTime'. Riguarda chi di noi ha letto (indovinato) le specifiche migliori. –

1

I don' so C# ma, se si scopre che non esiste un comodo modo API per ottenerlo, uno dei modi in cui puoi farlo è seguire la logica:

today -> +1 month -> set day of month to 1 -> -1 day 

Ovviamente, si presuppone che tu disponga di dati matematici di quel tipo.

23

Se si desidera che la data di, dato un mese e un anno, questo sembra circa la destra:

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

È possibile trovare l'ultima data di un mese da questo codice:

var now = DateTime.Now; 
var startOfMonth = new DateTime(now.Year, now.Month, 1); 
var DaysInMonth = DateTime.DaysInMonth(now.Year, now.Month); 
var lastDay = new DateTime(now.Year, now.Month, DaysInMonth); 
8

È possibile trovare l'ultimo giorno del mese da una singola riga di codice:

int maxdt = (new DateTime(dtfrom.Year, dtfrom.Month, 1).AddMonths(1).AddDays(-1)).Day; 
+0

Mi viene da chiedermi che invece del metodo semplice: 'DateTime.DaysInMonth', perché qualcuno dovrebbe cercare questo modo illeggibile e complesso per raggiungerlo !? - Ma come una soluzione valida è accettabile;). –

3

Da DateTimePicker:

Prima data:

DateTime first_date = new DateTime(DateTimePicker.Value.Year, DateTimePicker.Value.Month, 1); 

Ultima data:

DateTime last_date = new DateTime(DateTimePicker.Value.Year, DateTimePicker.Value.Month, DateTime.DaysInMonth(DateTimePicker.Value.Year, DateTimePicker.Value.Month)); 
1

Per ottenere l'ultimo giorno del mese in un calendario specifico e in un metodo di estensione:

public static int DaysInMonthBy(this DateTime src, Calendar calendar) 
{ 
    var year = calendar.GetYear(src);     // year of src in your calendar 
    var month = calendar.GetMonth(src);     // month of src in your calendar 
    var lastDay = calendar.GetDaysInMonth(year, month); // days in month means last day of that month in your calendar 
    return lastDay; 
} 
Problemi correlati