2012-02-20 3 views
3

나는 TDateTime 함수와 프로 시저를 공부하지만, 일, 월, 일 등의 일 수를 변환 할 수있는 것을 찾지 못했습니다. 나는 결과 갖도록해야 :년, 월, 일 날짜 형식으로 일 변환

Year: 0 
Month: 0 
Day: 0 

아니면 일 = 1을 가져야한다 있습니다

Year: 0 
Month: 0 
Day: 1 // Just 1 day 

또는 만약 내가 일 = 32 :

Year: 0 
Month: 1 // January is 31 days 
Day: 1 // Day is 1 
      // Total are 32 days 
,

등, 2 월 2 일이 29 일뿐 아니라 28 일뿐 만 아니라 고려해야합니다. delphi xe2에서 누가 어떤 기능을 수행하는지 또는 누가 수동으로 작성해야 하는지를 누가 알 수 있습니까? 매우 감사합니다.

+0

http://meta.stackoverflow.com에서 태그에 대해 질문해야합니다. –

+0

질문에 대한 여러 가지 intepretations가 있습니다. –

+0

고마워, 필터에 대해 해결 :) –

답변

6

을 :

procedure daysToDate(days: Integer; out day, month, year: Integer); 
var 
    january1st: TDateTime; 
    targetDate: TDateTime; 
begin 
    january1st := StartOfTheYear(Now()); 
    targetDate := IncDay(january1st, days); 

    day := DayOfTheMonth(targetDate) - 1; 
    month := MonthOfTheYear(targetDate) - 1; 
    year := YearOf(targetDate) - YearOf(january1st); 
end; 

이 코드는 현재의 일을 계산하는 것으로 가정 년. 다른 해에 시작하려면 필요에 따라 january1st := StartOfTheYear(Now()); 줄을 수정하십시오.

+0

고마워, 내 문제를 해결. 매우 감사합니다. –

+2

@Marcello : 그렇다면 질문에 대한 의도 된 해석이 가장 자연스러운 해석과 다릅니다. –

+0

아니요, 카운터에 대해 해결되었습니다. 실제로, 나는 날짜, 시간, 분, 초, 밀리 세컨드와 같은 datetime 형식으로 정수 (밀리 초를 나타냄)를 변환하고 싶었습니다. 나는 encodetime으로 시도해 보았지만 시간, 분, 초, 밀리 초 동안 잘 작동하지만 인코딩 된 상태는 작동하지 않습니다. 예를 들어, 언젠가는 86400000 밀리 초가 걸리므로 인코딩 된 것이 1 일 정도 걸리 겠지만 잘못된 값으로 바뀌는 것은 확실합니다. –

3

나는 당신의 질문을 정말로 이해하지 못합니다.

당신은 (일부 시간 범위에서) 일 수를 번역하려면 : 단순한 이유에 대해 정확히 같은 것은, 그것은 당신이주는 이유, 잘 정의되지 않을 것 없다

: 매월 같은 날 수는 없습니다. 따라서 입력 은 일 수일 만이 될 수 없습니다. 예를 들어, "35 일"을 입력하면 결과는 어떻게됩니까? "1 개월, 4 일"또는 "1 개월, 5 일", "1 개월, 6 일"또는 "1 개월, 7 일"이어야합니까? 대신, 초기 및 최종 날짜를 지정해야합니다.

지금, DateUtils, 당신은 DaysBetween, MonthsBetweenYearsBetween 가지고 있지만, 이러한 은 대략이다.

대략적인 값으로 살 수있는 경우에도 다음과 같이 쉽습니다. 년수는 일수의 정수 부분과 365.24로 나눈 값이며, 월 수는 소수 부분 시간과 같습니다.

당신은 몇 년의 N 번째 일 취득 할 경우 DateUtils의 방법을 사용

IncDay(StartOfTheYear(SomeYear), N) 
+0

안녕하세요, 사실, 나는 그 초기 날짜가 0 (년 = 0, 월 0, 하루 = 0)라고 생각합니다. Datetime은 실제 값입니다. 예를 들어 datetime 변수를 0.99999999로 설정하면 23 시간 59 분 59 초 999 밀리 초가됩니다. 그래서 나는 그것을 1.0000000으로 설정하는 것은 1 일, 0 개월, 0 년에 대한 평등이라고 생각했지만, 1899 년, 12 개월 및 30 일을 반환하는 것은 당연히 잘못되었습니다 (광산 경우). 너무 만약 내가 델파이에 대한 첫 번째 데이트를 나타냅니다 이해했습니다. –

+1

@Marcello : ['TDateTime'] (http://docwiki.embarcadero.com/VCL/en/System.TDateTime)에 대한 도움말 기사를 읽는 것을 고려해야합니다. – Chris

+0

예 @Chris, infact 나는 결과를 이해했습니다. 그것을 읽고, 거기서 읽었습니다. –

관련 문제