DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

明日、昨日、年(あるいは月や週)の最初の日と最後の日などを取得する

ここでは、明日や昨日を表すDateTimeオブジェクトを取得する方法を紹介します。その他に、年の初めの日(元日)と終わりの日(大晦日)、月の初めの日と終わりの日、週の初めの日と終わりの日を取得する方法も紹介します。

なおここでは、今日の日付をDateTime.Todayで取得して、その日からみた明日や昨日を取得しています。別の日を基準にして明日や昨日を取得したい時は、その部分を変更してください。

DateTimeに関する知識がない方は、「指定した日時のDateTimeオブジェクトを作成する」と「日時(DateTimeオブジェクト)の情報を取得する」をご覧ください。また、日時の計算については「日時、時間の計算をする」をご覧ください。さらに、現在の日時を取得する方法については「現在の日時を取得する」で説明しています。

明日や昨日を取得する

明日の日付をDateTimeで取得するには、現在のDateTimeに1日足します。昨日の日付を取得するには、現在のDateTimeから1日引きます。

以下の例では、明日と昨日の他に、明後日、明明後日、一昨日、一昨昨日も取得しています。

VB.NET
コードを隠すコードを選択
'今日
Dim dtToday As DateTime = DateTime.Today

'明日
Dim dtTomorrow As DateTime = dtToday.AddDays(1)

'明後日
Dim dtDAT As DateTime = dtToday.AddDays(2)

'明明後日
Dim dt3DL As DateTime = dtToday.AddDays(3)

'昨日
Dim dtYesterday As DateTime = dtToday.AddDays(-1)

'一昨日
Dim dtDBY As DateTime = dtToday.AddDays(-2)

'一昨昨日
Dim dt3DA As DateTime = dtToday.AddDays(-3)
C#
コードを隠すコードを選択
//今日
DateTime dtToday = DateTime.Today;

//明日
DateTime dtTomorrow = dtToday.AddDays(1);

//明後日
DateTime dtDAT = dtToday.AddDays(2);

//明明後日
DateTime dt3DL = dtToday.AddDays(3);

//昨日
DateTime dtYesterday = dtToday.AddDays(-1);

//一昨日
DateTime dtDBY = dtToday.AddDays(-2);

//一昨昨日
DateTime dt3DA = dtToday.AddDays(-3);

今年の元日(最初の日)や大晦日(最後の日)を取得する

今年の元日を取得する時は、現在の日時を表すDateTimeオブジェクトからYearプロパティで年を取得し、その年の1月1日を表すDateTimeオブジェクトを新たに作成します。

大晦日の場合も同様に12月31日として構いませんが、大晦日の日にちが分からない(グレゴリオ暦以外の暦を使用するなどで)のであれば、来年の1月1日から1日引く方法もあります。

VB.NET
コードを隠すコードを選択
Dim dtToday As DateTime = DateTime.Today

'今年の元日(1月1日)
Dim dtNewYearsDay As New DateTime(dtToday.Year, 1, 1)

'今年の大晦日(12月31日)
Dim dtNewYearsEve As New DateTime(dtToday.Year, 12, 31)
'または、来年の元日から1日引く
Dim dtNewYearsEve2 As DateTime = New DateTime(dtToday.Year + 1, 1, 1).AddDays(-1)
C#
コードを隠すコードを選択
DateTime dtToday = DateTime.Today;

//今年の元日(1月1日)
DateTime dtNewYearsDay = new DateTime(dtToday.Year, 1, 1);

//今年の大晦日(12月31日)
DateTime dtNewYearsEve = new DateTime(dtToday.Year, 12, 31);
//または、来年の元日から1日引く
DateTime dtNewYearsEve2 = new DateTime(dtToday.Year + 1, 1, 1).AddDays(-1);

今月の最初の日(一日)や最後の日(末日、三十日)を取得する

指定した月が何日あるかは、DateTime.DaysInMonthメソッドで取得できます。これを使って今月の最後の日を取得することができます。または、来月の最初の日から1日引く方法もあります。

VB.NET
コードを隠すコードを選択
Dim dtToday As DateTime = DateTime.Today

'今月の最初の日
Dim dtFDM As New DateTime(dtToday.Year, dtToday.Month, 1)

'今月の最後の日
Dim dtLDM As New DateTime(dtToday.Year, dtToday.Month, _
    DateTime.DaysInMonth(dtToday.Year, dtToday.Month))
'または、来月の初めの日から1日引く
Dim dtLDM2 As DateTime = _
    New DateTime(dtToday.Year, dtToday.Month, 1).AddMonths(1).AddDays(-1)
C#
コードを隠すコードを選択
DateTime dtToday = DateTime.Today;

//今月の最初の日
DateTime dtFDM = new DateTime(dtToday.Year, dtToday.Month, 1);

//今月の最後の日
DateTime dtLDM = new DateTime(dtToday.Year, dtToday.Month,
    DateTime.DaysInMonth(dtToday.Year, dtToday.Month));
//または、来月の初めの日から1日引く
DateTime dtLDM2 =
    new DateTime(dtToday.Year, dtToday.Month, 1).AddMonths(1).AddDays(-1);

今週の最初の日(週始め)や最後の日(週末)を取得する

指定した日が何曜日かは、DateTime.DayOfWeekプロパティで取得できるDayOfWeek列挙体の値で知ることができます。DayOfWeek列挙体の値を整数にキャストすると、DayOfWeek.Sundayが0、DayOfWeek.Saturdayが6になりますので、これを利用して今週の最初の日と最後の日を計算できます。

VB.NET
コードを隠すコードを選択
Dim dtToday As DateTime = DateTime.Today

'1週間が日曜日から始まり、土曜日で終わる時
'今週の最初の日
Dim dtLastSunday As DateTime = dtToday.AddDays(0 - CInt(dtToday.DayOfWeek))
'今週の最後の日
Dim dtNextSaturday As DateTime = dtToday.AddDays(6 - CInt(dtToday.DayOfWeek))

'1週間が月曜日から始まり、日曜日で終わる時
'今週の最初の日
Dim dtLastMonday As DateTime = dtToday.AddDays( _
    If(dtToday.DayOfWeek = DayOfWeek.Sunday, -6, 1 - CInt(dtToday.DayOfWeek)))
'または、
Dim dtLastMonday2 As DateTime = dtToday.AddDays( _
    (7 - CInt(dtToday.DayOfWeek)) Mod 7 - 6)
'今週の最後の日
Dim dtNextSunday As DateTime = dtToday.AddDays( _
    If(dtToday.DayOfWeek = DayOfWeek.Sunday, 0, 7 - CInt(dtToday.DayOfWeek)))
'または、
Dim dtNextSunday2 As DateTime = dtToday.AddDays( _
    (7 - CInt(dtToday.DayOfWeek)) Mod 7)
C#
コードを隠すコードを選択
DateTime dtToday = DateTime.Today;

//1週間が日曜日から始まり、土曜日で終わる時
//今週の最初の日
DateTime dtLastSunday = dtToday.AddDays(0 - (int)dtToday.DayOfWeek);
//今週の最後の日
DateTime dtNextSaturday = dtToday.AddDays(6 - (int)dtToday.DayOfWeek);

//1週間が月曜日から始まり、日曜日で終わる時
//今週の最初の日
DateTime dtLastMonday = dtToday.AddDays(
    dtToday.DayOfWeek == DayOfWeek.Sunday ? -6 : 1 - (int)dtToday.DayOfWeek);
//または、
DateTime dtLastMonday2 = dtToday.AddDays((7 - (int)dtToday.DayOfWeek) % 7 - 6);
//今週の最後の日
DateTime dtNextSunday = dtToday.AddDays(
    dtToday.DayOfWeek == DayOfWeek.Sunday ? 0 : 7 - (int)dtToday.DayOfWeek);
//または、
DateTime dtNextSunday2 = dtToday.AddDays((7 - (int)dtToday.DayOfWeek) % 7);

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。