0

长话短说:

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

  1. 您提供工作日名称(例如星期日)
  2. 您将获得对应的工作日编号(这取决于返回的第一个工作日WeekdayName,例如,如果星期日是一周的第一天,您将获得 1 表示星期日)

背景:

我在 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().

4

3 回答 3

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
于 2012-09-07T14:58:47.673 回答
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
于 2012-09-07T02:52:20.937 回答
0

通过使用val()函数,将给出从 0 到 6 的星期数:

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

于 2020-09-29T05:15:30.703 回答