2012-01-13 4 views
8

Delphi를 사용하여 현재 날짜를 평가하고 예를 들어 월의 세 번째 일요일 등인지 확인하는 기능이 필요합니다. . 의사에서첫 번째 [Monday], 두 번째 [Thursday] 등. Delphi

:

또 다른 기능이, 두 번째, 세 번째 넷째과 마지막 달의 계산에 필요하다
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 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로 나눕니다.

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

두 번째 발생에 대한 해당 기능은 다음과 같습니다 :

+0

그래, 그는 아마도 '모드'를 의미합니다. –

+0

'DayOf'는'DayOfTheMonth'와 같은 결과를 주어야합니다. 나는 이것을 두 문장으로 구분해야합니다. 요점은 간단한 수학을 사용하여 그것을 할 수 있다는 것이 었습니다. 데이비드의 대답은 괜찮습니다. –

+0

@DavidHeffernan - 대답을 가리키고있는 것이 아니라 "나누기"부분입니다. 나는'DateTime' Perl 모듈의 내부를 본 후 날짜 계산과 관련된 것을 코딩하는 것을 비겁하게 거절합니다. –

관련 문제