簡単に言えば:
WeekdayName()
次の用語で、の逆関数が必要です。
- 曜日名を入力します(例: 日曜日)
- 対応する曜日番号を取得します(これは、 で返される最初の曜日によって異なり
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()
.