C#で月末・月初を計算する方法(AddMonths・DaysInMonth)完全ガイド
生徒
「プログラムで今月の月末や来月の月初を自動で求めたいです。簡単にできますか?」
先生
「はい。C#には日付操作に便利な機能が用意されています。特にDateTime構造体とDateTime.DaysInMonth、DateTime.AddMonthsを組み合わせると簡単に月初・月末を計算できます。」
生徒
「具体例を見せてください。プログラミング未経験でもわかるように説明してください。」
先生
「いいですよ。まずは用語の簡単な説明から始めますね。」
1. 用語のやさしい説明(初心者向け)
DateTime(デートタイム)は、年・月・日・時・分・秒などの「日時」を表す道具です。AddMonthsはその日時に指定した月数を足す(または引く)ための機能、DaysInMonthは指定した年と月に何日あるかを教えてくれる関数です。たとえば「2024年2月は29日あるか?」という疑問に答えてくれます。
2. 考え方(かんたんな例え)
月初・月末を求める作業はカレンダーのページめくりに似ています。今持っている日付を基準に「その月の最初の日」を取得するのが月初、「その月の最後の日」を取得するのが月末です。DaysInMonthでその月の日数を調べ、日付の「日」だけを差し替えればOKです。
3. サンプルコード:月初と月末を取得する基本パターン
以下は、指定した日付からその月の月初と月末を返すシンプルな関数例です。コード中のコメントも読んでください。
using System;
class Program
{
// 指定日付の月初を返す
static DateTime GetFirstDayOfMonth(DateTime date)
{
return new DateTime(date.Year, date.Month, 1);
}
// 指定日付の月末を返す
static DateTime GetLastDayOfMonth(DateTime date)
{
int days = DateTime.DaysInMonth(date.Year, date.Month);
return new DateTime(date.Year, date.Month, days);
}
static void Main()
{
DateTime today = DateTime.Now;
DateTime first = GetFirstDayOfMonth(today);
DateTime last = GetLastDayOfMonth(today);
Console.WriteLine($"今日: {today}");
Console.WriteLine($"月初: {first}");
Console.WriteLine($"月末: {last}");
}
}
(ここに出力結果)
この例ではDateTime.DaysInMonth(year, month)でその月の日数を得て、月末の日付を作成しています。月初は単純に1日を指定します。
4. AddMonthsを使った応用例:翌月の月初・月末
「来月の月初」や「先月の月末」を簡単に求めたいときは、AddMonths(1)やAddMonths(-1)が便利です。AddMonthsは月をまたいだ補正(たとえば1月31日に1か月足すと3月3日になるような挙動)を内部で扱いますが、月初や月末を求めるときは基準日を月の1日に変えてからAddMonthsすると安全です。
// 来月の月初を求める例
DateTime thisMonthFirst = new DateTime(today.Year, today.Month, 1);
DateTime nextMonthFirst = thisMonthFirst.AddMonths(1);
// 来月の月末を求める例
int nextMonthDays = DateTime.DaysInMonth(nextMonthFirst.Year, nextMonthFirst.Month);
DateTime nextMonthLast = new DateTime(nextMonthFirst.Year, nextMonthFirst.Month, nextMonthDays);
この流れだと、1月31日のような「月によって日数が違う日」でも安全に翌月や前月を計算できます。
5. 実践的な注意点とよくある疑問
- タイムゾーン:
DateTime.Nowは実行環境のローカル時間を返します。UTC基準で扱いたければDateTime.UtcNowを使います。 - AddMonthsの端数処理:1月31日に
AddMonths(1)すると2月に同じ日は存在しないため最終日に自動で調整されます。意図した日付になるか確認しましょう。 - 年またぎ:12月から翌年1月になる場合も
AddMonthsとDaysInMonthの組み合わせで正しく計算できます。
6. よく使うキーワード(SEO向け)
C# 月末取得, C# 月初取得, DateTime 月末, DateTime.DaysInMonth, AddMonths 使い方, C# 日付計算, 月の最終日, 月の初日, .NET 日付操作
7. まとめ代わりのワンポイント(補足)
基本は「基準日を月の1日にしてからAddMonthsで移動」+「DaysInMonthで日数を取得して月末を作る」という2ステップです。これだけ覚えれば月初・月末の計算はほとんどのケースで困りません。