System.DateUtils Simple trimming functions 섹션

4093 단어
오늘부터 Delphi 원본 코드를 연구하여 이 언어를 더욱 깊이 이해하도록 하겠습니다. 더 이상 코드 짐꾼이 아니라 고급 코드 짐꾼이 되겠습니다!!!
먼저 Date Utils부터 시작하고 시간이 있으면 업데이트를 할 예정입니다. 초보자이기 때문에 잘못된 말이나 부정확한 점이 있으면 여러분의 조언을 부탁드립니다. 감사합니다!!!
(저는 개인적으로 D6, D72006, XE8을 사용해 봤기 때문에 가장 자주 사용하는 것은 D7이고 현재 최신판델파이는 XE8이기 때문에 앞으로 모든 관련 글은 XE8의 원본으로 연구할 것입니다. 특수 설명은 제외)
System.D:\ProgramFiles\Embarcadero\Studio\16.0\source\rtl\common\System.DateUtils.pas (설치 경로는 반드시 당신들의 것으로 바꿔야 합니다)
먼저 DateOf와 TimeOf의 주장과 실현을 살펴보겠습니다.
//    , System.DateUtils  69 
{ Simple trimming functions }

function DateOf(const AValue: TDateTime): TDateTime; inline;
function TimeOf(const AValue: TDateTime): TDateTime; inline;
//    , System.DateUtils  577 
function DateOf(const AValue: TDateTime): TDateTime;
begin
  Result := Trunc(AValue);
end;

function TimeOf(const AValue: TDateTime): TDateTime;
begin
  Result := Frac(AValue);
end;

다음은 제가 테스트한 코드입니다.
unit UMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, system.DateUtils;

type
  TFMain = class(TForm)
    btnDateOf: TButton;
    MMOResult: TMemo;
    btnTimeOf: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnDateOfClick(Sender: TObject);
    procedure btnTimeOfClick(Sender: TObject);
  private
    FDateFormatSetting: TFormatSettings;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FMain: TFMain;
  sDate: string = '2015-08-10 14:28:28';

implementation

{$R *.dfm}

procedure TFMain.btnDateOfClick(Sender: TObject);
var
  dBefore, dAfter: TDateTime;
begin
  //DateOf:         ,     00:00:00  (       )
  dBefore := StrToDateTime(sDate, FDateFormatSetting);
  //      TDateTime         1899 12 30    0      
  // DateOf      Trunc              
  //           1899 12 30   +             
  //      (  TDateTime        ,        )
  dAfter := DateOf(dBefore);
  //(DateOf)beforeDate:2015-08-10 14:28:28
  MMOResult.Lines.Add('(DateOf)beforeDate:' + FormatDateTime('yyyy-MM-dd HH:nn:ss', dBefore));
  //(DateOf)afterDate:2015-08-10 00:00:00
  MMOResult.Lines.Add('(DateOf)afterDate:' + FormatDateTime('yyyy-MM-dd HH:nn:ss', dAfter));
end;

procedure TFMain.btnTimeOfClick(Sender: TObject);
var
  dBefore, dAfter: TDateTime;
begin
  //TimeOf:         ,     1899-12-30  
  dBefore := StrToDateTime(sDate, FDateFormatSetting);
  //     ,TimeOf    Frac            
  //                  
  //   24*60*TimeOf   ,      0 0 0 0           
  dAfter := TimeOf(dBefore);
  // Delphi     1899-12-30   
  //          
  //(TimeOf)beforeDate:2015-08-10 14:28:28
  MMOResult.Lines.Add('(TimeOf)beforeDate:' + FormatDateTime('yyyy-MM-dd HH:nn:ss', dBefore));
  //(TimeOf)afterDate:1899-12-30 14:28:28
  MMOResult.Lines.Add('(TimeOf)afterDate:' + FormatDateTime('yyyy-MM-dd HH:nn:ss', dAfter));
end;

procedure TFMain.FormCreate(Sender: TObject);
begin
  //                              
  FDateFormatSetting.ShortDateFormat := 'yyyy-MM-dd';
  FDateFormatSetting.DateSeparator := '-';
  FDateFormatSetting.TimeSeparator := ':';
  //FDateFormatSetting.LongTimeFormat:='hh:mm:ss.zzz';
  FDateFormatSetting.LongTimeFormat := 'hh:mm:ss';
end;

end.

다음은 위 코드에 사용된 키워드 및 기타 함수에 대한 간단한 설명입니다.
inline: (1) 어떤 함수를 설명할 때 - 응용 프로그램의 성능을 향상시키기 위해 inline으로 함수 과정을 설명할 수 있다. inline으로 성명하는 과정에 대해 컴파일러는 컴파일러를 컴파일할 때 정상적인 프로세스 호출 방식을 대체한다. 대신 이 함수의 컴파일러 코드를 가져와 이 과정을 호출하는 곳으로 생성할 수 있다. 여러 곳에서 함수를 호출하고 호출하는 곳에 함수의 컴파일러 코드를 직접 삽입한다.이런 폐단은 비교적 큰 EXE 파일을 생성할 수 있다.
발췌문: Delphi XE4 inline 사용
(2) InLine Asm assembler , . . :Delphi Delphi  Inline , , , , .

Trunc(): Trunc(-123.55)=-123과 같은 매개변수의 정수 부분을 반환합니다.
Frac(): Frac(-123.55)=-0.55.와 같은 매개변수의 소수점을 반환합니다.
코드 예

좋은 웹페이지 즐겨찾기