VB.Net 2.0 を使用して ASP.Net で四半期 (四半期の日付) を操作するにはどうすればよいですか?
質問
私はそれを知っています 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)
これにより速度が向上するかどうかはわかりませんが、私の意見ではよりクリーンに見えます
所属していません StackOverflow