DateTimeで特定の月の末日を求める方法について。
方法1 DateTime.DaysInMonthを使う
DateTime.DaysInMonthメソッドを使って目的の月の日数を取得してDateTimeインスタンスを作成する。
using System;
class Sample {
// DaysInMonthメソッドを使って末日を求めるメソッド
static DateTime GetLastDayOf(int year, int month)
{
// year年month月の一ヶ月間の日数を求める
int lastDay = DateTime.DaysInMonth(year, month);
// 末日のインスタンスを作成
DateTime lastDayOfMonth = new DateTime(year, month, lastDay);
return lastDayOfMonth;
}
static void Main()
{
//2012年1月〜12月の各月の末尾を求める
for (int month = 1; month <= 12; month++) {
Console.WriteLine(GetLastDayOf(2012, month));
}
}
}
Imports System
Class Sample
' DaysInMonthメソッドを使って末日を求めるメソッド
Shared Function GetLastDayOf(ByVal year As Integer, ByVal month As Integer) As DateTime
' year年month月の一ヶ月間の日数を求める
Dim lastDay As Integer = DateTime.DaysInMonth(year, month)
' 末日のインスタンスを作成
Dim lastDayOfMonth As New DateTime(year, month, lastDay)
Return lastDayOfMonth
End Function
Shared Sub Main()
' 2012年1月〜12月の各月の末尾を求める
For month As Integer = 1 To 12
Console.WriteLine(GetLastDayOf(2012, month))
Next
End Sub
End Class
実行結果
2012/01/31 0:00:00 2012/02/29 0:00:00 2012/03/31 0:00:00 2012/04/30 0:00:00 2012/05/31 0:00:00 2012/06/30 0:00:00 2012/07/31 0:00:00 2012/08/31 0:00:00 2012/09/30 0:00:00 2012/10/31 0:00:00 2012/11/30 0:00:00 2012/12/31 0:00:00
方法2 翌月頭の日付から1日引く
一旦次の月の1日の日付を求め、そこから1日引くことで目的の月の末日を求める。
using System;
class Sample {
// 日付の加減算によって末日を求めるメソッド
static DateTime GetLastDayOf(int year, int month)
{
// 翌月1日の日付を求める
DateTime firstDayOfNextMonth = new DateTime(year, month, 1);
firstDayOfNextMonth = firstDayOfNextMonth.AddMonths(1);
// さらにそこから1日引いたものを求める
DateTime lastDayOfMonth = firstDayOfNextMonth.AddDays(-1);
return lastDayOfMonth;
}
static void Main()
{
//2012年1月〜12月の各月の末尾を求める
for (int month = 1; month <= 12; month++) {
Console.WriteLine(GetLastDayOf(2012, month));
}
}
}
Imports System
Class Sample
' 日付の加減算によって末日を求めるメソッド
Shared Function GetLastDayOf(ByVal year As Integer, ByVal month As Integer) As DateTime
' 翌月1日の日付を求める
Dim firstDayOfNextMonth As New DateTime(year, month, 1)
firstDayOfNextMonth = firstDayOfNextMonth.AddMonths(1)
' さらにそこから1日引いたものを求める
Dim lastDayOfMonth As DateTime = firstDayOfNextMonth.AddDays(-1)
Return lastDayOfMonth
End Function
Shared Sub Main()
' 2012年1月〜12月の各月の末尾を求める
For month As Integer = 1 To 12
Console.WriteLine(GetLastDayOf(2012, month))
Next
End Sub
End Class
出力例
2012/01/31 0:00:00 2012/02/29 0:00:00 2012/03/31 0:00:00 2012/04/30 0:00:00 2012/05/31 0:00:00 2012/06/30 0:00:00 2012/07/31 0:00:00 2012/08/31 0:00:00 2012/09/30 0:00:00 2012/10/31 0:00:00 2012/11/30 0:00:00 2012/12/31 0:00:00