.NET TIPS

指定した月から特定の曜日の日付を取得するには?[C#、VB]

デジタルアドバンテージ 遠藤 孝信
2008/09/11

 本稿では、ある月のカレンダーから特定の曜日の日付を得る場合の方法について解説する。例えば2008年9月で日曜日となる日付は7日、14日、21日、28日の4日間あるが、これらの日付を得たい場合の処理である。

 このような処理を行うには、指定された月について、その先頭の日から順に、その曜日をチェックしていけばよい。特定の日付(DateTimeオブジェクト)の曜日は、そのDayOfWeekプロパティから得ることができ、その値はDayOfWeek列挙体で定義されている7つの曜日のうちのいずれかとなる。

 次のサンプル・プログラムでは、GetSundaysというメソッドを定義して、2008年9月で日曜日となる日付を列挙している。

// sundays.cs

using System;
using System.Collections.Generic;

class Program {
  static void Main() {

    DateTime[] days = GetSundays(2008, 9);

    foreach (DateTime d in days) {
      Console.WriteLine(d);
    }
    // 出力:
    // 2008/09/07 0:00:00
    // 2008/09/14 0:00:00
    // 2008/09/21 0:00:00
    // 2008/09/28 0:00:00
  }

  static DateTime[] GetSundays(int y, int m) {

    List<DateTime> days = new List<DateTime>();

    for (DateTime d = new DateTime(y, m, 1);
                            d.Month == m; d = d.AddDays(1)) {
      if (d.DayOfWeek == DayOfWeek.Sunday) {
        days.Add(d);
      }
    }
    return days.ToArray();
  }
}
// コンパイル方法:csc sundays.cs
特定の月の日曜日の日付を表示するC#のサンプル・プログラム(sundays.cs)

' sundays.vb

Imports System
Imports System.Collections.Generic

Class GetSundays
  Shared Sub main()

    Dim days As DateTime() = GetSundays(2008, 9)

    For Each d As DateTime In days
      Console.WriteLine(d)
    Next
    ' 出力:
    ' 2008/09/07 0:00:00
    ' 2008/09/14 0:00:00
    ' 2008/09/21 0:00:00
    ' 2008/09/28 0:00:00
  End Sub

  Shared Function GetSundays(ByVal y As Integer, ByVal m As Integer) As DateTime()

    Dim days As New List(Of DateTime)()

    Dim d As DateTime = New DateTime(y, m, 1)
    While d.Month = m
      If d.DayOfWeek = DayOfWeek.Sunday Then
        days.Add(d)
      End If
      d = d.AddDays(1)
    End While

    Return days.ToArray()
  End Function
End Class

' コンパイル方法:sundays.vb
特定の月の日曜日の日付を表示するVBのサンプル・プログラム(sundays.vb)

 日付を順に進めていく際に、ここではAddDaysメソッドを使用している。これはDateTimeオブジェクトに任意の日数を加算した後の日付を得ることのできるメソッドである。End of Article

カテゴリ:クラス・ライブラリ 処理対象:日付と時刻
使用ライブラリ:DateTime構造体(System名前空間)
使用ライブラリ:DayOfWeek列挙体(System名前空間)

この記事と関連性の高い別の.NET TIPS
週の始まりの日付を求めるには?
月初/月末の日付を求めるには?[C#、VB]
n日後、nカ月後、n年後の日付を求めるには?[C#、VB]
指定した日の曜日を取得するには?[C#/VB]
年齢を計算するには?[C#/VB]
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間