|
.NET TIPS
週の始まりの日付を求めるには?
デジタルアドバンテージ 遠藤 孝信
2005/10/28 |
|
|
週単位の処理を行う場合などでは、今週の月曜日の日付といった、特定の日付を含んだ週の始まりの日付(通常はその週の日曜日あるいは月曜日の日付)が必要になることがある。本稿ではこのような週の始まりの日付の求め方について解説する。
DateTime構造体のDayOfWeekプロパティとDayOfWeek列挙体
.NETでは、特定の日付の日時情報はDateTime構造体(System名前空間)により表され、その日付の曜日をDayOfWeekプロパティにより取得できる。このプロパティの値は、DayOfWeek列挙体(System名前空間)の値となる。
DayOfWeek列挙体にはすべての曜日が定義されており、そのメンバは次に示すように日曜日を示す0から土曜日を示す6までの値を持っている。
public enum DayOfWeek {
Sunday = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 3,
Thursday = 4,
Friday = 5,
Saturday = 6
}
|
|
DayOfWeek列挙体の定義(C#) |
このように、DayOfWeek列挙体の値は連続した数値として定義されているため、特定の日付の曜日の値をその日付から引き算することで、週の始まりの日付を求めることができる。このような処理を行うメソッドとその使用例を以下に示す。
// firstday.cs
using System;
public class FirstDayOfWeek {
// 日曜日始まりの場合
public static DateTime FirstDayOfThisWeek(DateTime d) {
return d.AddDays(DayOfWeek.Sunday - d.DayOfWeek);
}
// 月曜日始まりの場合
public static DateTime FirstDayOfThisWeek2(DateTime d) {
int diff = DayOfWeek.Monday - d.DayOfWeek;
if (diff > 0)
diff -= 7;
return d.AddDays(diff);
}
static void Main() {
DateTime today, sunday, monday;
today = DateTime.Parse("2005/10/28"); // 木曜日
sunday = FirstDayOfThisWeek(today);
Console.WriteLine(sunday); // 出力:2005/10/23 0:00:00
monday = FirstDayOfThisWeek2(today);
Console.WriteLine(monday); // 出力:2005/10/24 0:00:00
today = DateTime.Parse("2005/10/30"); // 日曜日
sunday = FirstDayOfThisWeek(today);
Console.WriteLine(sunday); // 出力:2005/10/30 0:00:00
monday = FirstDayOfThisWeek2(today);
Console.WriteLine(monday); // 出力:2005/10/24 0:00:00
}
}
// コンパイル方法:csc firstday.cs
|
|
週の始まりの日付を求めるC#のサンプル・プログラム(firstday.cs) |
|
' firstday.vb
Imports System
Public Class FirstDayOfWeek
' 日曜日始まりの場合
Shared Public Function FirstDayOfThisWeek(d As DateTime) As DateTime
Return d.AddDays(DayOfWeek.Sunday - d.DayOfWeek)
End Function
' 月曜日始まりの場合
Public Shared Function FirstDayOfThisWeek2(d As DateTime) As DateTime
Dim diff As Integer = DayOfWeek.Monday - d.DayOfWeek
If diff > 0 Then
diff -= 7
End If
Return d.AddDays(diff)
End Function
Shared Sub Main()
Dim today, sunday, monday As DateTime
today = DateTime.Parse("2005/10/28") ' 木曜日
sunday = FirstDayOfThisWeek(today)
Console.WriteLine(sunday) ' 出力:2005/10/23 0:00:00
monday = FirstDayOfThisWeek2(today)
Console.WriteLine(monday) ' 出力:2005/10/24 0:00:00
today = DateTime.Parse("2005/10/30") ' 日曜日
sunday = FirstDayOfThisWeek(today)
Console.WriteLine(sunday) ' 出力:2005/10/30 0:00:00
monday = FirstDayOfThisWeek2(today)
Console.WriteLine(monday) ' 出力:2005/10/24 0:00:00
End Sub
End Class
' コンパイル方法:vbc firstday.vb
|
|
週の始まりの日付を求めるVB.NETのサンプル・プログラム(firstday.vb) |
|
特定の日付に対して日数を加減算するには、DateTime構造体のAddDaysメソッドが利用できる。週の終わりの日付を求めたければ、上記のようにして得た日付に対してAddDays(6)を実行すればよい。
カテゴリ:クラス・ライブラリ 処理対象:日付と時刻
使用ライブラリ:DateTime構造体(System名前空間)
使用ライブラリ:DayOfWeek列挙体(System名前空間) |
|
generated by
|
|
Insider.NET 記事ランキング
本日
月間