|
.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オブジェクトに任意の日数を加算した後の日付を得ることのできるメソッドである。
カテゴリ:クラス・ライブラリ 処理対象:日付と時刻
使用ライブラリ:DateTime構造体(System名前空間)
使用ライブラリ:DayOfWeek列挙体(System名前空間)
|
|
generated by
|
|
Insider.NET 記事ランキング
本日
月間