月の最終日を取得するにはどうすればよいですか?


326

C#で月の最終日を見つけるにはどうすればよいですか?

たとえば、1980年3月8日の日付の場合、8月の最終日(この場合は31)を取得するにはどうすればよいですか?


2
@マーク:何を聞いたらいいの?あなた自身の答えは拡張メソッドを必要としないと私は思います。
abatishchev 2010年

4
最終日は月だけではなく、年も必要です。2010年2月の最終日は28ですが、2008年2月の最終日は29です
Guffa

@abatishchevそれは拡張メソッドを必要としませんが、質問は本当にそれを求めていません。しかし、少なくとも私にとっては、それを見る方がはるかに優れており、読みやすくなっています。拡張メソッドは、何よりも提案でした。私のソリューションだけでなく、どのようなソリューションも拡張メソッドで機能します。
マーク

回答:


656

あなたがこのように得る月の最後の日、それは31を返します:

DateTime.DaysInMonth(1980, 08);

28
public static DateTime ConvertToLastDayOfMonth(DateTime date){return new DateTime(date.Year、date.Month、DateTime.DaysInMonth(date.Year、date.Month)); 月の最終日を日付形式で取得するには
regisbsb

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

@Henk実際、私はソースDateTimeからを作成する場所からこれを引き出しましたlastDayOfMonth。正直なところ、どちらの方法も完璧に機能します。それはどちらの方法がより良いかという根本的な議論です。私はそれを両方の方法で行い、どちらも同じ答えを出します。
マーク

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

次の1行のコードで、月の最終日を見つけることができます。

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

単純な方法の代わりにDateTime.DaysInMonth、なぜそれを達成するために誰かがこの判読不能で複雑な方法を探す必要があるのか​​と疑問に思っています!?-しかし、有効な解決策は許容可能です;)。
shA.t 2017

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

この回答は質問者の例にのみ応答します。より包括的な答えがより役立つでしょう。
スコットローレンス

入力値として任意の日付を使用できるため、このソリューションを任意の日付に適用できます。
Jasper Risseeuw 2018年

1
一部の日付では失敗します。試してみてくださいvar myDate = new DateTime(1980, 1, 31);(29日を返します)
Hans Ke st ing

ハンス・ケジン、その通りです。次の月の日数が現在の日より少ない場合、このメソッドは失敗します。DateTime.DaysInMonth()を使用するのが最も簡単な方法だと思いますが、これは受け入れられる回答なので、私の回答は削除する必要があります。
Jasper Risseeuw 2018年

-1

私はC#を知りませんが、それを取得するための便利なAPI方法がないことが判明した場合、これを行う方法の1つは、ロジックに従うことです。

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

もちろん、それはあなたがそのタイプの日付計算を持っていることを前提としています。


これは正確ではありません。
EJoshuaS-モニカを復元する
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.