vb.net-如何从工作日名称中获取日数 长话短说:
我需要反向函数vb.net-如何从工作日名称中获取日数 长话短说:,vb.net,date,dayofweek,weekday,Vb.net,Date,Dayofweek,Weekday,我需要反向函数WeekdayName(),用以下术语表示: 您提供一个星期日名称(例如星期日) 您将获得相应的星期日编号(这取决于在WeekdayName中返回的第一个星期日,例如,如果星期日是一周的第一天,您将获得星期日的1) 背景: 我正在vb.net中使用日期函数。到现在为止,一直都还不错。我使用该函数设置TabControl中选项卡页面的标题。我的自定义控件(日历控件的一种)保存了前面提到的TabControl,它可以选择一周中哪一天播放 如果要显示所有日期,TabControl将通过迭
WeekdayName()
,用以下术语表示:
WeekdayName
中返回的第一个星期日,例如,如果星期日是一周的第一天,您将获得星期日的1)TabControl
中选项卡页面的标题。我的自定义控件(日历控件的一种)保存了前面提到的TabControl
,它可以选择一周中哪一天播放
如果要显示所有日期,TabControl
将通过迭代上面提到的WeekdayName()
函数来填充TabPage
(由系统日历本地化和管理,由我大写)
如果只设置了星期二和星期五,则将有两个标签页包含这些标题,并按[星期二|星期五]
排序。如果您决定添加星期三,现在应该有3个选项卡页:[星期二|星期三|星期五]
,依此类推
为了使选项卡保持排序,当我需要插入要显示的选项卡时,我希望提供选项卡的标题,以对照新的插入工作日名称进行检查,并以这种方式解决顺序问题
我相信一个解决方法是创建一个带有标签标题字符串的假日期对象,以便有一个,例如,“星期日”日期,然后使用:但我希望有一个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()的形式存储在系统设置顺序中)
很抱歉,如果格式不好,我从不使用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
我不认为它有内置的功能。但是如果你使用的是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
通过使用val()
函数,将给出从0到6的星期数:
intDayofWeek=val(System.DateTime.Now.DayOfWeek)
您是否只需要一个基本的查找,例如,如果用户输入星期日返回1、星期一返回2等。这是静态的,其中星期日始终等于1?不,我希望这取决于区域设置(如WeekdayName()
函数所示,返回“星期日”当输入为1时,实际上星期天是一周的第一天)。如果选择星期二作为一周的第一天,则WeekdayName()
将返回“星期二”当1是输入时。我感谢您的关注,但是这种方法不支持不同的地区,正如我所提到的,我希望找到一种API方法。我可以编写类似的方法,但我真诚地认为,如果有合适的框架方法,则最好使用适当的框架方法。考虑到上面的编辑应该做到这一点,而不考虑文化e运行此功能的系统设置为。