カテゴリ: C# 更新日: 2025/11/30

C#で月末・月初を計算する方法(AddMonths・DaysInMonth)完全ガイド

C#で月末・月初を計算する方法(AddMonths・DaysInMonth)
C#で月末・月初を計算する方法(AddMonths・DaysInMonth)

先生と生徒の会話形式で理解しよう

生徒

「プログラムで今月の月末や来月の月初を自動で求めたいです。簡単にできますか?」

先生

「はい。C#には日付操作に便利な機能が用意されています。特にDateTime構造体とDateTime.DaysInMonthDateTime.AddMonthsを組み合わせると簡単に月初・月末を計算できます。」

生徒

「具体例を見せてください。プログラミング未経験でもわかるように説明してください。」

先生

「いいですよ。まずは用語の簡単な説明から始めますね。」

1. 用語のやさしい説明(初心者向け)

1. 用語のやさしい説明(初心者向け)
1. 用語のやさしい説明(初心者向け)

DateTime(デートタイム)は、年・月・日・時・分・秒などの「日時」を表す道具です。AddMonthsはその日時に指定した月数を足す(または引く)ための機能、DaysInMonthは指定した年と月に何日あるかを教えてくれる関数です。たとえば「2024年2月は29日あるか?」という疑問に答えてくれます。

2. 考え方(かんたんな例え)

2. 考え方(かんたんな例え)
2. 考え方(かんたんな例え)

月初・月末を求める作業はカレンダーのページめくりに似ています。今持っている日付を基準に「その月の最初の日」を取得するのが月初、「その月の最後の日」を取得するのが月末です。DaysInMonthでその月の日数を調べ、日付の「日」だけを差し替えればOKです。

3. サンプルコード:月初と月末を取得する基本パターン

3. サンプルコード:月初と月末を取得する基本パターン
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を使った応用例:翌月の月初・月末

4. AddMonthsを使った応用例:翌月の月初・月末
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. 実践的な注意点とよくある疑問

5. 実践的な注意点とよくある疑問
5. 実践的な注意点とよくある疑問
  • タイムゾーンDateTime.Nowは実行環境のローカル時間を返します。UTC基準で扱いたければDateTime.UtcNowを使います。
  • AddMonthsの端数処理:1月31日にAddMonths(1)すると2月に同じ日は存在しないため最終日に自動で調整されます。意図した日付になるか確認しましょう。
  • 年またぎ:12月から翌年1月になる場合もAddMonthsDaysInMonthの組み合わせで正しく計算できます。

6. よく使うキーワード(SEO向け)

6. よく使うキーワード(SEO向け)
6. よく使うキーワード(SEO向け)

C# 月末取得, C# 月初取得, DateTime 月末, DateTime.DaysInMonth, AddMonths 使い方, C# 日付計算, 月の最終日, 月の初日, .NET 日付操作

7. まとめ代わりのワンポイント(補足)

7. まとめ代わりのワンポイント(補足)
7. まとめ代わりのワンポイント(補足)

基本は「基準日を月の1日にしてからAddMonthsで移動」+「DaysInMonthで日数を取得して月末を作る」という2ステップです。これだけ覚えれば月初・月末の計算はほとんどのケースで困りません。

カテゴリの一覧へ
新着記事
New1
C#
C#のメモリ管理とガーベジコレクションの基礎を理解しよう
New2
C#
C#の参照型と値型の違いを初心者向けにやさしく解説!
New3
C#
C#のクエリ式とメソッド式の書き換え方を完全ガイド!LINQの2つの書き方をマスター
New4
C#
C#の戻り値にタプルを使う方法!複数の値を返すテクニック
人気記事
No.1
Java&Spring記事人気No1
C#
C#で文字列が数値か判定する方法を解説!char.IsDigitやTryParseの基本
No.2
Java&Spring記事人気No2
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.3
Java&Spring記事人気No3
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.4
Java&Spring記事人気No4
C#
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
No.5
Java&Spring記事人気No5
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.7
Java&Spring記事人気No7
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.8
Java&Spring記事人気No8
C#
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方