vb.net - 如何从工作日名称获取日期编号

时间:2012-09-07 00:10:51

标签: vb.net date dayofweek weekday

长话短说:

我需要WeekdayName()的反函数,用以下术语表示:

  1. 您提供一周工作日名称(例如星期日)
  2. 您获得通讯周日数字(这取决于WeekdayName中返回的第一周工作日,例如,如果周日是周日的第一天,则周日为1周)
  3. 背景:

    我在vb.net中使用日期函数。到现在为止还挺好。我正在使用函数WeekdayName()来为TabControl中的标签页设置标题。我的自定义控件(日历控件的类型)保存了上面提到的TabControl,并且可以选择您想要显示的星期几。

    如果您想要显示所有日期,TabControl将通过迭代上述TabPage功能填充WeekdayName()(由系统日历本地化和管理,并由我大写)。

    如果您仅在星期二和星期五设置,则您将有两个标签页,其中包含这些标题,并排序为[Tuesday | Friday]。如果您决定添加星期三,现在您应该有3个标签页:[Tuesday | Wednesday | Friday],依此类推......

    为了保持标签排序,当我需要插入要显示的标签时,我想提供标签的标题,以检查新的插入工作日名称,并以此方式解决订单。

    我相信一个解决方法是创建一个假日期对象,其中包含标签的标题字符串,以便有一个例如“星期日”日期,然后使用:Weekday()但我希望有一个API解决方案

    注意:这是如何从日期获取日期编号。


    修改

    在我们讨论@jmshapland时,使用默认本地化和系统设置的自定义代码方法可能是:

    Function WeekdayNumber(day as String)
        ' The following initialization does not necessary go in this function.
        ' The idea is to have a mapping between key day name and index in the
        ' same order as the WeekdayName() method with the default system settings
        Dim weekdayNamesCollection as Collection = New Collection()
        For i = 1 to WEEKDAYS
            Dim wDay as String = WeekdayName(i)
            ' add the day with a key with the same name
            weekdayNamesCollection.add(wDay, wDay)
        Next i
    
        If weekdayNamesCollection.ContainsKey(day) Then
            Return weekdayNamesCollection.IndexOfKey(day) + 1
        End If
    
        ' Raise an error as the string 'day' is not in the collection
    End Sub
    

    我没有测试这个,因为我在没有任何框架和/或IDE的计算机中。但基本上,我们的想法是返回工作日名称存储在集合中的索引(之前,它以系统设置顺序存储为WeekdayName()

3 个答案:

答案 0 :(得分:1)

我认为它没有内置功能。但是如果您使用的是WeekdayName,那么您应该将它用于您的目的。

Public Function WeekDayNumber(ByVal weekName As String) As Integer

    Dim weekNames As New Dictionary(Of String, Integer)

    For i As Integer = 1 To 7
        weekNames.Add(WeekdayName(i), i)
    Next

    Return weekNames(weekName)
End Function

答案 1 :(得分:0)

对不起,如果格式不好,我从不使用VB通常只是C#。但是,这应该做你想要的...如果你想让一周的第一天返回为0而不是1,只需从return语句中删除+ 1.

Private Function FindDayOfWeek(day As String) As Integer
    Dim daysOfWeek = CultureInfo.CurrentCulture.DateTimeFormat.DayNames

    Dim counter As Integer = Array.IndexOf(daysOfWeek, WeekdayName(1))
    Dim numericDay As Integer

    For i As Integer = 0 To 6
        If counter > 6 Then
            counter = 0
        End If

        If daysOfWeek(counter) = day Then
            numericDay = i
            Exit For
        End If
        counter += 1
    Next

    Return numericDay + 1
End Function

答案 2 :(得分:0)

通过使用val()函数,将星期几从0改为6:

intDayofWeek = val(System.DateTime.Now.DayOfWeek)