한 달의 마지막 날은 어떻게 받습니까?


324

C #에서 해당 월의 마지막 날을 어떻게 찾을 수 있습니까?

예를 들어, 날짜가 03/08/1980 인 경우 8 월 마지막 날 (이 경우 31)을 얻으려면 어떻게해야합니까?


2
@ 마크 : 무엇을 요청할 수 있습니까? 귀하의 답변에는 확장 방법이 필요하지 않습니다.
abatishchev

4
마지막 날은 해당 월에만 한정되지 않으며 연도도 필요합니다. 2010 년 2 월 마지막 날은 28 일이지만 2008 년 2 월 마지막 날은 29 일입니다.
Guffa

@abatishchev 그것은 확장 방법이 필요 하지 않지만 질문은 실제로 그것을 요구하지 않습니다. 그러나 적어도 하나는 그것을 보는 것이 훨씬 좋고 훨씬 더 읽기 쉽습니다. 확장 방법은 무엇보다 제안이었습니다. 모든 솔루션은 내 것이 아니라 확장 방법으로 작동합니다.
Mark

답변:


654

이 달의 마지막 날은 31을 반환합니다.

DateTime.DaysInMonth(1980, 08);

28
공용 정적 DateTime ConvertToLastDayOfMonth (DateTime 날짜) {새 날짜 시간 반환 (날짜, 년, 날짜, 월, DateTime.DaysInMonth (날짜, 년, 날짜. 월)); } 날짜 형식으로 월의 마지막 날을 가져 오려면
regisbsb

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

@Henk 실제로 나는에서 소스를 만드는 곳에서 이것을 뽑았 DateTime습니다 lastDayOfMonth. 솔직히 어느 쪽이든 완벽하게 작동합니다. 어느 쪽이 더 좋은지에 대한 논란의 여지가 있습니다. 나는 두 가지 방법으로 그것을했고 둘 다 같은 대답을 산출합니다.
Mark

37

한 달과 일년이 주어진 날짜 를 원한다면 이것은 옳은 것처럼 보입니다.

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

9

다음 달 1 일에서 하루를 빼십시오.

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

또한 12 월에도 작동 해야하는 경우 :

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

6

이 코드로 모든 달의 마지막 날짜를 찾을 수 있습니다.

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

한 줄의 코드로 해당 월의 마지막 날을 찾을 수 있습니다.

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

간단한 방법 대신에 DateTime.DaysInMonth왜 누군가가 그것을 읽을 수없는이 복잡한 방법을 찾아야하는지 궁금 합니다.? -그러나 유효한 해결책으로 수용 가능합니다.).
shA.t

5

에서 DateTimePicker:

첫 데이트:

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

마지막 날짜 :

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

2

특정 달력 및 확장 방법으로 한 달의 마지막 날을 얻으려면 :

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

이 답변은 질문자의 예에만 응답합니다. 보다 포괄적 인 답변이 더 도움이 될 것입니다.
Scott Lawrence

원하는 날짜를 입력 값으로 사용할 수 있으므로이 솔루션을 원하는 날짜에 적용 할 수 있습니다.
Jasper Risseeuw

1
그것은 어떤 날짜에 실패합니다, 시도 var myDate = new DateTime(1980, 1, 31);(29를 반환)
Hans Ke st ing

Hans Ke st ing, 네 말이 맞아. 다음 달에 현재보다 일 수가 적은 경우이 방법이 실패합니다. 가장 쉬운 방법은 DateTime.DaysInMonth ()를 사용하는 것 같지만 허용되는 답변이므로 내 답변을 삭제해야합니다.
Jasper Risseeuw

-1

나는 C #을 모르지만, 그것을 얻는 편리한 API 방법이없는 것으로 판명되면 그렇게 할 수있는 방법 중 하나는 논리를 따르는 것입니다.

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

물론, 그것은 당신이 그 유형의 날짜 수학을 가지고 있다고 가정합니다.


정확하지 않습니다.
EJoshuaS-Monica Monica 복원
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.