0

現在の週の日付 (月曜日から日曜日) を取得しようとしています。

これは私の現在のコードです:

    Dim kw As Integer = DatePart(DateInterval.WeekOfYear, Now, , FirstWeekOfYear.FirstFourDays)
            If DatePart(DateInterval.Weekday, Now, Microsoft.VisualBasic.FirstDayOfWeek.Sunday) = 6 Then
                kw = kw + 1
            End If
            Dim CurrDateFirstDay As Date = DateAdd(DateInterval.Day, 1, ReturnDateForWeekNumber(kw))
            For i = 1 To 7


                strCurrDay = FormatDateTime(CurrDateFirstDay, DateFormat.LongDate)

........

私の問題は、私のコードが 16.01.2013 で始まり、最後の日付が来週の木曜日 22.01.2013 であることです。何故ですか?2013 年 1 月 14 日月曜日ではなく、2013 年 1 月 16 日水曜日に開始するのはなぜですか? また、次の週の日付が返されるのはなぜですか? 何が間違っているのですか?

編集:

ReturnDateForWeekNumber:

Public Shared Function ReturnDateForWeekNumber(ByVal iWeek As Integer) As DateTime
    Return DateAdd(DateInterval.WeekOfYear, iWeek - 1, FirstDayOfYear)
End Function
4

2 に答える 2

3

私は何を間違っていますか?

私が行ったように、デバッガーでコードをステップ実行し、結果を観察する必要があります。

Dim kw As Integer = DatePart(DateInterval.WeekOfYear, Now, , FirstWeekOfYear.FirstFourDays)

これは、第 3 週である現在の週を返します。

If DatePart(DateInterval.Weekday, Now, Microsoft.VisualBasic.FirstDayOfWeek.Sunday) = 6 Then
    kw = kw + 1
End If

これは、平日が週の 6 日目 (金曜日) であるかどうかをチェックします。フライデーじゃないので条件に入らないと。

Dim CurrDateFirstDay As Date = DateAdd(DateInterval.Day, 1, ReturnDateForWeekNumber(kw))

これにより、ReturnDateForWeekNumber の結果に 1 日が追加され、以下が返されます。

Return DateAdd(DateInterval.WeekOfYear, iWeek - 1, FirstDayOfYear)

これにより、年の最初の日 (1 月 1 日) である火曜日に 2 (週 3 - 1) 週が追加されます。1 月 1 日 + 2 週間 = 1 月 15 日。

ここで、ReturnDateForWeekNumber に 1 日追加したことを思い出してください。これCurrDateFirstDayが、値が 1 月 16 日の理由です。

編集

あなたのコードは非常に複雑で、多くのレガシー VB6 関数を使用していると思います。私はこのようにします:

Dim myDate As Date = DateTime.Today
Dim dayDiff As Integer = myDate.DayOfWeek - DayOfWeek.Monday
Dim currentDay As Date = myDate.AddDays(-dayDiff) 'Monday

For i = 1 to 7
    Console.WriteLine(currentDay)
    'Do something with current day
    currentDay = currentDay.AddDays(1)
Next

ケースに合わせて調整が必要になる場合がありますが、このアプローチの方が簡単で、エラーが発生しにくいと思います。

于 2013-01-14T13:51:36.313 に答える