我需要WeekdayName()
的反函数,用以下术语表示:
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()
。
答案 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)