.NETで作る!

.NETに関するあれこれ(C#、VB.NET)

日付の操作(月・日・時・分・秒の切り捨て、月初日、月末日)

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"))
. .