2010-11-02 24 views
69

Olası Çoğalt: daha iyi bir yolAyın son gününü nasıl buluyorsunuz?

DateTime createDate = new DateTime(year, month, 1).AddMonths(1).AddDays(-1); 

var mı:
How to get the last day of a month?

Şimdiye kadar, bu var? DaysInMonth kullanma hakkında nasıl

+7

Daha önce hiç kendi takviminizi yazdınız mı? Bu karşılaştırma ile harika bir çözümdür. : D – Neil

+0

Sadece bu yazıya bakarak, bu nasıl bir kopya olabilir? Benim sorum bir yol gösteriyor ve daha iyi bir şey varsa sorgular. Başvurulan sadece herhangi bir yöntem için soruyor. – Irwin

cevap

181

:

DateTime createDate = new DateTime (year, month, 
            DateTime.DaysInMonth(year, month)); 

(Kendime not - Noda Time bu kolay hale gerekir ...)

+0

@JonSkeet NodaTime'da bunu hiç kolay hale getirmediniz mi, yoksa bunu yapmanın en iyi yolu bu mu? –

+0

@BenJenkinson: Şu anda kesinlikle en iyi yol. 2.0'da bir "DateAdjuster" kullanabilirsin - şu anda "LastDayOfMonth" için bir tane yok, ama bu gece bir tane ekleyebilirim :) –

+1

@BenJenkinson: Ha - bu çıktı * ben * zaten yaptım - 'DateAdjusters .EndOfMonth'. –

19

Herhangi bir belirli gün sayısını almak için yöntem DateTime.DaysInMonth(year,month) kullanabilirsiniz ay.

var anyDt = DateTime.Now; 
var lastDayOfMonth = anyDt.AddMonths(1).AddDays(anyDt.AddMonths(1).Day).Date; 

ya:: Özel bir kod sürümü ilgileniyorsanız

1

var anyDt = DateTime.Now; 
var lastDayOfMonth = anyDt.AddDays(1-anyDt.Day).AddMonths(1).AddDays(-1).Date; 

veya

bir yöntem olarak:

DateTime LastDayInMonth(DateTime anyDt) 
    { return anyDt.AddMonths(1).AddDays(anyDt.AddMonths(1).Day).Date; } 

veya bir uzantısı yöntemi olarak:

DateTime LastDayInMonth(DateTime this anyDt) 
    { return anyDt.AddMonths(1).AddDays(anyDt.AddMonths(1).Day).Date; } 
Bu olabilir de bir kaç diğer yararlı uzantıları olan

public static DateTime First(this DateTime current) 
    { 
     DateTime first = current.AddDays(1 - current.Day); 
     return first; 
    } 

    public static DateTime First(this DateTime current, DayOfWeek dayOfWeek) 
    { 
     DateTime first = current.First(); 

     if (first.DayOfWeek != dayOfWeek) 
     { 
      first = first.Next(dayOfWeek); 
     } 

     return first; 
    } 

    public static DateTime Last(this DateTime current) 
    { 
     int daysInMonth = DateTime.DaysInMonth(current.Year, current.Month); 

     DateTime last = current.First().AddDays(daysInMonth - 1); 
     return last; 
    } 

:

İşte http://datetimeextensions.codeplex.com/

bazı örnek kod:

+0

En iyi ihtimalle, bu kod, geçerli ayın son gününü değil, sonraki ayın ilk gününü döndürür. Ayrıca, aylarca farklı günlerde işlerken sorunlara yol açar. Bugün, 1/4/2017 idi, bu kod 2/1/2017 dönecektir. Bugün 1/31/2017 olsaydı, bu kod 1/29/2017 dönecektir. –

5

İşte CodePlex üzerinde yararlı bir DateTime uzatma kütüphanede bulunan zarif bir yaklaşım size yardımcı olun.

İlgili konular