0

簡単に言えば:

WeekdayName()次の用語で、の逆関数が必要です。

  1. 曜日を入力します(例: 日曜日)
  2. 対応する曜日番号を取得します(これは、 で返される最初の曜日によって異なりWeekdayNameます。たとえば、日曜日が週の最初の曜日である場合、日曜日は 1 になります)。

バックグラウンド:

vb.net で日付関数を使用しています。ここまでは順調ですね。WeekdayName()でタブページのタイトルを設定するために関数を使用していますTabControl。私のカスタム コントロール (一種のカレンダー コントロール) は、前述の機能を保持してTabControlおり、表示する曜日を選択するオプションがあります。

すべての日を表示したい場合は、上記の関数 (システム カレンダーによってローカライズおよび管理され、私によって大文字化されたもの)を反復処理するTabControlことTabPageによって s が埋められます。WeekdayName()

火曜日と金曜日のみを設定すると、これらのタイトルの 2 つのタブ ページが表示され、次のように並べ替えられ[Tuesday | Friday]ます。水曜日を追加すると、3 つのタブ ページが表示[Tuesday | Wednesday | Friday]されます: など...

タブの並べ替えを維持するために、表示するタブを挿入する必要があるときに、タブのタイトルを提供して、挿入する曜日名と照合し、その方法で順序を解決したいと考えています。

回避策の 1 つは、タブのタイトル文字列を含む偽の日付オブジェクトを作成して、たとえば「日曜日」の日付を作成してから使用すること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# だけです。ただし、これはあなたが探していることを行うはずです...週の最初の曜日を1ではなく0として返したい場合は、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 に答える