DateTimeクラスを使えば簡単にできます。 こんな拡張メソッドを作っとくといいかもしれない。
Imports System.Runtime.CompilerServices Public Module DateTimeExtension ''' <summary> ''' 月を切り捨てます。(日付が1月1日になり、時分秒がゼロになります) ''' </summary> <Extension()> Public Function TruncMonth(source As DateTime) As DateTime Dim d = New DateTime(source.Year, 1, 1, 0, 0, 0, 0) Return d End Function ''' <summary> ''' 日付を切り捨てます。(日付が1日になり、時分秒がゼロになります) ''' </summary> <Extension()> Public Function TruncDay(source As DateTime) As DateTime Dim d = New DateTime(source.Year, source.Month, 1, 0, 0, 0, 0) Return d End Function ''' <summary> ''' 時間を切り捨てます。(時分秒がゼロになります) ''' </summary> <Extension()> Public Function TruncHour(source As DateTime) As DateTime Return source.Date End Function ''' <summary> ''' 分を切り捨てます。 ''' </summary> <Extension()> Public Function TruncMinute(source As DateTime) As DateTime Dim d = New DateTime(source.Year, source.Month, source.Day, source.Hour, 0, 0, 0) Return d End Function ''' <summary> ''' 秒を切り捨てます。 ''' </summary> <Extension()> Public Function TruncSecond(source As DateTime) As DateTime Dim d = New DateTime(source.Year, source.Month, source.Day, source.Hour, source.Minute, 0, 0) Return d End Function ''' <summary> ''' ミリ秒を切り捨てます。 ''' </summary> <Extension()> Public Function TruncMillSecond(source As DateTime) As DateTime Dim d = New DateTime(source.Year, source.Month, source.Day, source.Hour, source.Minute, source.Second, 0) Return d End Function ''' <summary> ''' 1日を取得します。 ''' </summary> <Extension()> Public Function FirstDate(source As DateTime) As DateTime Return source.TruncDay End Function ''' <summary> ''' 月末日を取得します。 ''' </summary> <Extension()> Public Function LastDay(source As DateTime) As DateTime Return source.TruncDay.AddMonths(1).AddDays(-1) End Function End Module
実行結果
'2015/08/22 15:31:56.023 Debug.Print(d.ToString("yyyy/MM/dd HH:mm:ss.fff")) '2015/01/01 00:00:00.000 Debug.Print(d.TruncMonth.ToString("yyyy/MM/dd HH:mm:ss.fff")) '2015/08/01 00:00:00.000 Debug.Print(d.TruncDay.ToString("yyyy/MM/dd HH:mm:ss.fff")) '2015/08/22 00:00:00.000 Debug.Print(d.TruncHour.ToString("yyyy/MM/dd HH:mm:ss.fff")) '2015/08/22 15:00:00.000 Debug.Print(d.TruncMinute.ToString("yyyy/MM/dd HH:mm:ss.fff")) '2015/08/22 15:31:00.000 Debug.Print(d.TruncSecond.ToString("yyyy/MM/dd HH:mm:ss.fff")) '2015/08/22 15:31:56.000 Debug.Print(d.TruncMillSecond.ToString("yyyy/MM/dd HH:mm:ss.fff")) '2015/08/01 00:00:00.000 Debug.Print(d.FirstDate.ToString("yyyy/MM/dd HH:mm:ss.fff")) '2015/08/31 00:00:00.000 Debug.Print(d.LastDay.ToString("yyyy/MM/dd HH:mm:ss.fff"))