Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vb.net-如何从工作日名称中获取日数 长话短说:_Vb.net_Date_Dayofweek_Weekday - Fatal编程技术网

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)
  • 背景: 我正在vb.net中使用日期函数。到现在为止,一直都还不错。我使用该函数设置
    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运行此功能的系统设置为。