0

我在玩文化日历。我原以为 GregorianCalendar (和其他人)会是 under 的一种System.Globalization.Calendar,但事实并非如此。这是一个等同于日历的全球化类。在下面的功能中,我认为我不能做我想做的事,但在报废之前......

我收到有关“cal”在封闭块中隐藏变量的错误,但我确实在dim语句中将其设置为默认值。Calendar 类似乎没有能力声明然后用文化来绘制它。看来您必须声明“文化”日历类,并且不能更改。您是否找到解决此问题的方法并将其保留在一个简短的函数中?

Public Function GetDaysInMonth(ByVal dt As Date,
                               Optional ByVal sCalendar As String = "GREGORIAN") As Integer

    Dim cal As System.Globalization.GregorianCalendar

    Dim y, m As Integer
    Select Case UCase(sCalendar)
        Case "HEBREW"
            Dim cal As New HebrewCalendar
        Case "HIJRI"
            Dim cal As New HijriCalendar
        Case "JAPENESE"
            Dim cal As New JapaneseCalendar
        Case "JULIAN"
            Dim cas As New JulianCalendar
        Case "KOREAN"
            Dim cal As New KoreanCalendar
        Case "TAIWAN"
            Dim cal As New TaiwanCalendar
        Case "THAIBUDDHIST"
            Dim cal As New ThaiBuddhistCalendar
        Case Else 'Gregorian
    End Select
    y = Year(dt)
    m = Month(dt)
    Return (cal.GetDaysInMonth(y, m))
4

1 回答 1

0

解决了。我不知道这是否是最简单的方法......但这是最终的工作代码。

    Public Function GetDaysInMonth(ByVal dt As Date,
                                   Optional ByVal sCalendar As String = "GREGORIAN") As Integer
System.Globalization.CultureInfo.InvariantCulture
        Dim cal As System.Globalization.GregorianCalendar
        Dim y, m As Integer
        y = Year(dt)
        m = Month(dt)
        Select Case UCase(sCalendar)
            Case "HEBREW"
                Dim cal1 As New HebrewCalendar
                Return (cal1.GetDaysInMonth(y, m))
            Case "HIJRI"
                Dim cal2 As New HijriCalendar
                Return (cal2.GetDaysInMonth(y, m))
            Case "JAPENESE"
                Dim cal3 As New JapaneseCalendar
                Return (cal3.GetDaysInMonth(y, m))
            Case "JULIAN"
                Dim cal4 As New JulianCalendar
                Return (cal4.GetDaysInMonth(y, m))
            Case "KOREAN"
                Dim cal5 As New KoreanCalendar
                Return (cal5.GetDaysInMonth(y, m))
            Case "TAIWAN"
                Dim cal6 As New TaiwanCalendar
                Return (cal6.GetDaysInMonth(y, m))
            Case "THAIBUDDHIST"
                Dim cal7 As New ThaiBuddhistCalendar
                Return (cal7.GetDaysInMonth(y, m))
            Case Else 'Gregorian
                Return (cal.GetDaysInMonth(y, m))
        End Select
    End Function
于 2013-07-02T22:54:07.160 回答