2015-01-28 4 views
1

나는 Delphi 프로그래밍의 새로운입니다. Data Types을 거치면서 DelphiTDateTime이 발견되었습니다.Delphi는 TDateTime을 Float 값으로 어떻게 계산합니까?

내 테스트 응용 프로그램에서 사용하는 동안 TDateTime 개체가 Float\Double 값을 제공한다는 사실을 알게되었습니다.

나는 약간 궁금합니다. TDateTimeDate Time에서 Double 값을 어떻게 계산합니까?

var 
    LDateTime: TDateTime; 
    LFloat: Double; 
begin 
    LDateTime := now;// current DateTime 
    LFloat:= LDateTime; // provide me a float value 
end; 

이 윈도우에서 Date and Time Value을 계산하는 어떤 공식을 사용하고 있습니다 :

아래는 내가 사용했던 예제 코드는?

누구나 TDateTime의 작업에 대한 추가 정보를 제안/제공합니까?

미리 감사드립니다.

+2

[documentation] (http://docwiki.embarcadero.com/Libraries/XE5/en/System.TDateTime)을 읽으려고하십니까? – RRUZ

+0

단지 레코드의 경우,'TDateTime'은 객체가 아닙니다; 'double 형 '의 typedef입니다. * System.pas *에서 :'TDateTime = double 형 입력 '. 어떤 종류의 변환도하기 위해서'LFloat'을 사용할 필요가 없습니다; 'MyDate : = Now + 10;'(10 일 추가)와 같이 직접'TDateTime'을 부동 소수점 값으로 사용할 수 있습니다. –

답변

6

float는 30.12.1899 이래로 일수를 나타냅니다. 따라서 float 값 = 1은 31.12.1899, 2 = 01.01.1900 등입니다. 시간은 하루의 일부로 저장됩니다. 0.25 = 06:00, 0.5 = 12:00, 0.75 = 18.00 ...

그래서 31.12.1899 12:00는 1.5와 같을 것입니다.

이렇게하면 TDateTime을 사용하기가 정말 쉽습니다. 일의 차이를 얻으려면 두 개의 DateTimes를 빼면됩니다.

2015년 2월 1일 - 그것이 될 수 = 1

간단한 2015년 1월 1일. 시간 차이를 얻으려면 24를 곱하십시오.

단위 DateUtils의 함수를 살펴보십시오. 그들은 때때로 편리하게옵니다.

+0

또한 수식 자체는 단위 SysUtils –

+2

의'EncodeDate '에서 찾을 수 있습니다. TDateTime을 Double로 사용하는 것은 구현 세부 사항이므로 피해야합니다. TDateTime 값을 처리하는 많은 루틴은 SysUtils 및 DateUtils입니다. [날짜 및 시간 지원] (http://docwiki.embarcadero.com/RADStudio/en/Date_and_Time_Support)을 참조하십시오. –

0

당신은 DateUtils.pas

TDateTime 값에서

function DateTimeToUnix(const AValue: TDateTime): Int64; 

function UnixToDateTime(const AValue: Int64): TDateTime; 

기능을 찾고은 FormatDateTime 기능으로 포맷 할 수 있습니다

//uses sysutils 

var  
    k:double;  
    t:tdatetime  
begin  
    t:=UnixToDateTime(1483909200);  
    showmessage(datetostr(t));  
    t:=strtodate('08.01.2017');  
    k:=DateTimeToUnix(t);  
    showmessage(k.ToString);  
end;