Bir ayın son gününü nasıl alabilirim?


325

C # 'da ayın son gününü nasıl bulabilirim?

Örneğin, 03/08/1980 tarihine sahipsem, 8 ayın son gününü nasıl alırım (bu durumda 31)?


2
@ Mark: Ne isteyebilirim? Kendi cevabınız bir uzatma yöntemi gerektirmiyor.
abatishchev

4
Son gün sadece aya özgü değildir, yıla da ihtiyacınız vardır. 2010 Şubat ayının son günü 28, ancak 2008 Şubat ayının son günü 29.
Guffa

@abatishchev Bir uzatma yöntemi gerektirmez , ancak soru gerçekten bunu istemez. Ancak, en azından benim için, bir tane görmek çok daha hoş ve çok daha okunabilir. Genişletme yöntemi her şeyden çok bir öneriydi. Herhangi bir çözüm, sadece benim değil, bir genişletme yönteminde işe yarayacaktır.
Mark

Yanıtlar:


655

Ayın son günü böyle olur, bu da 31 değerini döndürür:

DateTime.DaysInMonth(1980, 08);

28
public static DateTime ConvertToLastDayOfMonth (DateTime tarih) {yeni DateTime döndür (date.Year, date.Month, DateTime.DaysInMonth (date.Year, date.Month)); } tarih biçiminde ayın son gününü almak için
regisbsb

175
var lastDayOfMonth = DateTime.DaysInMonth(date.Year, date.Month);

@Henk Aslında bunu kaynağımızdan oluşturan bir yerden DateTimealdım lastDayOfMonth. Dürüst olmak gerekirse her iki şekilde de mükemmel çalışır. Hangi yolun daha iyi olduğu bilgiç bir argüman. Her iki şekilde de yaptım ve her ikisi de aynı cevabı veriyor.
Mark

37

Bir ay ve bir yıl verilen tarihi istiyorsanız , bu doğru görünüyor:

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

9

Gelecek ayın ilk gününden bir gün özetleme:

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

Ayrıca, Aralık ayında da çalışmanız gerekiyorsa:

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

6

Herhangi bir ayın son tarihini şu kodla bulabilirsiniz:

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);

6

Ayın son gününü tek bir kod satırı ile bulabilirsiniz:

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

Basit bir yöntem yerine, DateTime.DaysInMonthbirisinin neden bunu elde etmek için bu okunamayan ve karmaşık yolu araması gerektiğini merak ediyorum !? - Ama geçerli bir çözüm olarak kabul edilebilir;).
shA.t

5

itibaren DateTimePicker:

İlk buluşma:

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

Son tarih:

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

2

Belirli bir takvimde ve bir uzantı yönteminde - ayın son gününü almak için:

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;
}

2
// Use any date you want, for the purpose of this example we use 1980-08-03.
var myDate = new DateTime(1980,8,3);
var lastDayOfMonth = new DateTime(myDate.Year, myDate.Month, DateTime.DaysInMonth(myDate.Year, myDate.Month));

Bu cevap yalnızca sorucının örneğine yanıt verir. Daha kapsamlı bir cevap daha yararlı olacaktır.
Scott Lawrence

Girdi değeri olarak istediğiniz tarihi kullanabilirsiniz, böylece bu çözümü istediğiniz tarihe uygulayabilirsiniz.
Jasper Risseeuw

1
Bazı tarihler için başarısız olacak, deneyin var myDate = new DateTime(1980, 1, 31);(29'u döndürür)
Hans Ke sting

Hans Kesting, haklısın. Gelecek ay geçerli olandan daha az güne sahipse bu yöntem başarısız olur. Sanırım en kolay yolu DateTime.DaysInMonth () kullanmaktır, ancak bu cevap kabul edilir bu yüzden cevabım silinmelidir.
Jasper Risseeuw

-1

C # bilmiyorum ama, eğer onu elde etmek için uygun bir API yolu yoksa, bunu yapmanın yollarından biri mantığı takip etmektir:

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

Tabii ki, bu tür bir tarih matematiğiniz olduğunu varsayar.


Bu doğru değil.
EJoshuaS - Monica
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.