2

これは私の問題です。特定の週の月曜日を日付形式で返したいです。

ここまで頑張ってきました。

コード:

Dim Diff
Dim cDate
Dim prday
prday = [table.datefield]
Diff = Cint(0 - (Weekday(prday, 2)))
cDate = DateAdd("d", Diff, prday)
Result = cDate

ただし、これは残念ながら 1899 年 12 月 24 日を返します。2013年はいいだろう。私が間違っていた場所のヒントはありますか?

ノート:

データベース テーブルから引き出される特定の日付は、別のアプリケーションで行われます。このコードは、ラベルに表示される日付を生成することになっています。

4

2 に答える 2

2

拡張メソッドを定義する

Imports System.Runtime.CompilerServices

Module DateExtensions

    <Extension()> 
    Public Function GetMonday(ByVal dt As DateTime) as DateTime
        While dt.DayOfWeek <> DayOfWeek.Monday
           dt = dt.AddDays(-1)
        End While
        return dt
    End Function
End Module

そして、それを呼び出します

prday = prday.GetMonday()

または、汎用にすることもできます

Public Function GetPreviousDayOfWeek(ByVal dt As DateTime, prevDay As DayOfWeek) as DateTime
    While dt.DayOfWeek <> prevDay
       dt = dt.AddDays(-1)
    End While
    return dt
End Function

@dbasnett が指摘したように、数学はループよりも高速であり、日曜日が週の最初の日である状況を処理できます。したがって、より良いアプローチは

Public Function GetMonday(ByVal dt As DateTime) as DateTime
    Dim diff = Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek - DayOfWeek.Monday
    dt = dt.AddDays(diff)
    return  dt.AddDays(DayOfWeek.Monday - dt.DayOfWeek)
End Function
于 2013-04-24T12:45:08.557 に答える