VB.Net 2.0 を使用して ASP.Net で四半期 (四半期の日付) を操作するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/102521

質問

私はそれを知っています SQL Server には便利な四半期ごとの機能が組み込まれています 何かありますが、.Net ネイティブについてはどうでしょうか 日付時刻 物体?四半期を加算、減算、横断する最良の方法は何ですか?

ですか? 悪いこと™ を使用して VB 固有の DateAdd() 関数?例えば。:

Dim nextQuarter As DateTime = DateAdd(DateInterval.Quarter, 1, DateTime.Now)

編集:@bslorence の関数を拡張します。

Public Shared Function AddQuarters(ByVal originalDate As DateTime, ByVal quarters As Integer) As Datetime
    Return originalDate.AddMonths(quarters * 3)
End Function

@Matt の関数を拡張します。

Public Shared Function GetQuarter(ByVal fromDate As DateTime) As Integer
    Return ((fromDate.Month - 1) \ 3) + 1
End Function

編集:便利な機能をさらにいくつか紹介します。

Public Shared Function GetFirstDayOfQuarter(ByVal originalDate As DateTime) As DateTime
    Return AddQuarters(New DateTime(originalDate.Year, 1, 1), GetQuarter(originalDate) - 1)
End Function

Public Shared Function GetLastDayOfQuarter(ByVal originalDate As DateTime) As DateTime
    Return AddQuarters(New DateTime(originalDate.Year, 1, 1), GetQuarter(originalDate)).AddDays(-1)
End Function
役に立ちましたか?

解決

次の方法で日付の四半期を計算できることはわかっています。

Dim quarter As Integer = (someDate.Month - 1) \ 3 + 1

Visual Studio 2008 を使用している場合は、以下を参照して、DateTime クラスに追加機能をボルトオンしてみることができます。 拡張メソッド.

他のヒント

これはどう:

Dim nextQuarter As DateTime = DateTime.Now.AddMonths(3);

覚えておいていただきたいのは、すべての企業が月の最終日に四半期を終了するわけではないということです。

Public Function GetLastQuarterStart() As Date

    GetLastQuarterStart = DateAdd(DateInterval.Quarter, -1, DateTime.Now).ToString("MM/01/yyyy")

End Function

Public Function GetLastQuarterEnd() As Date

    Dim LastQuarterStart As Date = DateAdd(DateInterval.Quarter, -1, DateTime.Now).ToString("MM/01/yyyy")
    Dim MM As String = LastQuarterStart.Month
    Dim DD As Integer = 0
    Dim YYYY As String = LastQuarterStart.Year
    Select Case MM
        Case "01", "03", "05", "07", "08", "10", "12"
            DD = 31
        Case "02"
            Select Case YYYY
                Case "2012", "2016", "2020", "2024", "2028", "2032"
                    DD = 29
                Case Else
                    DD = 28
            End Select
        Case Else
            DD = 30
    End Select

    Dim LastQuarterEnd As Date = DateAdd(DateInterval.Month, 2, LastQuarterStart)

    MM = LastQuarterEnd.Month
    YYYY = LastQuarterEnd.Year

    Return String.Format("{0}/{1}/{2}", MM, DD, YYYY)

End Function

Matt Blaine の回答をさらに拡張すると、次のようになります。

Dim intQuarter As Integer = Math.Ceiling(MyDate.Month / 3)

これにより速度が向上するかどうかはわかりませんが、私の意見ではよりクリーンに見えます

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top