2012-01-13 10 views
8

Delphiを使用して、現在の日付を評価し、それが月の第3日曜日などであるかどうかを確認する関数が必要です。擬似コードで最初の[月曜日]、2番目の[木曜日]などDelphi

もう一つの機能は、第2、第3フォースと先月の計算に必要とされるであろう
function IsFirst(const CurrentDateTime: TDateTime; const Day: Word): Boolean; 
/// Day can be 1-7 (monday to sunday) 
begin 
    Result:= ?? 
end; 

。 DateUtilsはそんなことはないようです。何か案は?

+1

これまでに何を試みましたか? –

+0

あなたの関数には結果の型がありません。あなたの意図は、コードや質問のテキストから明らかではありません。 –

答えて

13

この機能は、何が必要です:

function IsFirst(const DateTime: TDateTime; const Day: Word): Boolean; 
begin 
    Result := (DayOfTheWeek(DateTime)=Day) and 
    InRange(DayOfTheMonth(DateTime), 1, 7); 
end; 

2回目の出現のための同等の機能は次のとおりです。

function IsSecond(const DateTime: TDateTime; const Day: Word): Boolean; 
begin 
    Result := (DayOfTheWeek(DateTime)=Day) and 
    InRange(DayOfTheMonth(DateTime), 8, 14); 
end; 

私はあなたが、第三、第四および第五の詳細を記入することができると確信してい。

function IsNth(const DateTime: TDateTime; const Day: Word; 
    const N: Integer): Boolean; 
var 
    FirstDayOfWeek, LastDayOfWeek: Integer; 
begin 
    LastDayOfWeek := N*7; 
    FirstDayOfWeek = LastDayOfWeek-6; 
    Result := (DayOfTheWeek(DateTime)=Day) and 
    InRange(DayOfTheMonth(DateTime), FirstDayOfWeek, LastDayOfWeek); 
end; 
4

これは、簡単な計算を使用して行うことができます。

DayOfTheWeekを取得し、DayOfを7で割ります。

+0

ええ、彼はおそらく 'mod'を意味します。 –

+0

私は 'DayOf'を意味します。これは' DayOfTheMonth'と同じ結果を与えるはずです。これを2つの文に分けてください。ポイントは、あなたは簡単な数学を使ってそれを行うことができるということでした。ダビッドの答えは大丈夫です。 –

+0

@DavidHeffernan - 私は答えを指していませんでした。ちょうど "分割する"部分です。私は、 'DateTime' Perlモジュールの内部を見た後に、日付計算に関連するものをコード化することを臆病に拒否します。 –

関連する問題