⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myldbdateformat.pas

📁 一个本地database引擎,支持中文T_Sql查询,兼容DELPHI标准数据库控件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
                04: s := 'IV';
                05: s := 'V';
                06: s := 'VI';
                07: s := 'VII';
                08: s := 'VIII';
                09: s := 'IX';
                10: s := 'X';
                11: s := 'XI';
                12: s := 'XII';
               end;}

     //dfDDD:    s := Format('%d',[DayOfTheYear(dt)]);
     dfDD:     begin
                d := (StrToInt(copy(str,start,2)));
                Inc(Start,2);
               end;
     dfD:      begin
                if str[start+1] in ['0'..'9'] then
                 begin
                  d := (StrToInt(copy(str,start,2)));
                  Inc(Start,2);
                 end
                else
                 begin
                  d := StrToInt(copy(str,start,1));
                  Inc(Start,1);
                 end
               end;
     //dfDAY:    s:=FormatDateTime('dddd',dt);
     //dfDY:     s:=FormatDateTime('ddd',dt);
     //dfD:      s := Format('%d',[DayOfTheWeek(dt)]);

     dfH24:   begin
                if str[start+1] in ['0'..'9'] then
                 begin
                  h := (StrToInt(copy(str,start,2)));
                  Inc(Start,2);
                 end
                else
                 begin
                  h := (StrToInt(copy(str,start,1)));
                  Inc(Start);
                 end
               end;
     dfHH24:   begin
                h := (StrToInt(copy(str,start,2)));
                Inc(Start,2);
               end;
     dfHH12,
     dfHH:     begin
                if str[start+1] in ['0'..'9'] then
                 begin
                  h := (StrToInt(copy(str,start,2)));
                  Inc(Start,2);
                 end
                else
                 begin
                  h := (StrToInt(copy(str,start,1)));
                  Inc(Start,1);
                 end
               end;

     dfNN:     begin
                mi := (StrToInt(copy(str,start,2)));
                Inc(Start,2);
               end;

     dfN:      begin
                if str[start+1] in ['0'..'9'] then
                 begin
                  mi := (StrToInt(copy(str,start,2)));
                  Inc(Start,2);
                 end
                else
                 begin
                  mi := (StrToInt(copy(str,start,1)));
                  Inc(Start,1);
                 end
               end;

     dfSS:     begin
                s := (StrToInt(copy(str,start,2)));
                Inc(Start,2);
               end;

     dfS:      begin
                if str[start+1] in ['0'..'9'] then
                 begin
                  s := (StrToInt(copy(str,start,2)));
                  Inc(Start,2);
                 end
                else
                 begin
                  s := (StrToInt(copy(str,start,1)));
                  Inc(Start,1);
                 end
               end;

     dfAMPM:   begin
                if UpperCase(copy(str,start,2))='PM' then
                 h := h + 12
                else
                 if UpperCase(copy(str,start,2))<>'AM' then
                  raise EMYLDBException.Create(30129, ErrorGAmPmExpected, [copy(str,start,2)]);
                Inc(Start,2);
               end;

     dfText:   begin
                Inc(Start, Length(FDateFormat[i].Text));
               end;
     else
      Inc(Start, Length(FDateFormat[i].Text));
      //raise Exception.Create('Unsupported DateFormatType');
   end;
  end;
  if (y=0) or (m=0) or (d=0) then
   begin
     y:=1899; m:=12; d:=30;
   end;
 Result := EncodeDate(y,m,d) + EncodeTime(h,mi,s,0);
end;

function TDateFormater.ToString(dt: TDateTime): String;
var
 i: Integer;
 s: string;
begin
 Result := '';
 for i:=0 to Length(FDateFormat)-1 do
  begin
   case FDateFormat[i].TokenType of
     dfYYYY,
     dfYEAR:   s := FormatDateTime('yyyy',dt);
     dfYY:     s := FormatDateTime('yy',dt);

     dfQ:      s := Format('%d',[(((MonthOf(dt)-1) div 3) + 1)]);

     dfMONTH:  s := FormatDateTime('mmmm',dt);
     dfMON:    s := FormatDateTime('mmm',dt);
     dfMM:     s := FormatDateTime('mm',dt);
     dfM:      s := FormatDateTime('m',dt);
     dfRM:     case MonthOf(dt) of
                01: s := 'I';
                02: s := 'II';
                03: s := 'III';
                04: s := 'IV';
                05: s := 'V';
                06: s := 'VI';
                07: s := 'VII';
                08: s := 'VIII';
                09: s := 'IX';
                10: s := 'X';
                11: s := 'XI';
                12: s := 'XII';
               end;

     dfDDD:    s:=FormatDateTime('ddd',dt);
     dfDD:     s := FormatDateTime('dd',dt);
     dfD:      s := FormatDateTime('d',dt);
     dfDAY:    s:=FormatDateTime('dddd',dt);
     dfDY:     s := Format('%d',[DayOfTheYear(dt)]);
     dfDW:     s := Format('%d',[DayOfTheWeek(dt)]);

     dfHH24:   s := FormatDateTime('hh',dt);
     dfHH,
     dfHH12:   s := Format('%.2d', [HourOfTheDay(dt) mod 12]);

     dfH24:   s := FormatDateTime('h',dt);
     dfH,
     dfH12:   s := Format('%d', [HourOfTheDay(dt) mod 12]);

     dfNN:     s := FormatDateTime('nn',dt);
     dfN:     s := FormatDateTime('n',dt);

     dfSS:     s := FormatDateTime('ss',dt);
     dfS:      s := FormatDateTime('s',dt);

     dfAMPM:   begin
                 if HourOfTheDay(dt) < 12 then
                   s := AM
                 else
                   s := PM
               end;
     dfText:   s := FDateFormat[i].Text;
     else
      raise Exception.Create('Unknown DateFormatType');
   end;
   Result := Result + s;
  end;

end;


function TDateFormater.GetStringMaxSize: Integer;
var
 i, s: Integer;
begin
 Result := 0;
 for i:=0 to Length(FDateFormat)-1 do
  begin
   case FDateFormat[i].TokenType of
     dfYYYY,
     dfYEAR:   s := 4;
     dfYY:     s := 2;

     dfQ:      s := 1;

     dfMONTH:  s := 9;
     dfMON:    s := 3;
     dfMM:     s := 2;
     dfM:      s := 2;
     dfRM:     s := 4;
     dfDDD:    s := 3;
     dfDD:     s := 2;
     dfDAY:    s := 12;
     dfDY:     s := 2;
     dfD:      s := 2;
     dfDW:     s := 2;

     dfH24,
     dfH,
     dfH12,
     dfHH24,
     dfHH,
     dfHH12:   s := 2;

     dfNN,
     dfN:      s := 2;

     dfS,
     dfSS:     s := 2;

     dfAMPM:   s := 2;

     dfText:   s := length(FDateFormat[i].Text);
     else
      raise Exception.Create('Unknown DateFormatType');
   end;
   Result := Result + s;
  end;
end;


function TDateFormater.GetDataType: TMYLDBAdvancedFieldType;
var
 i: Integer;
 bDate: Boolean;
 bTime: Boolean;
begin
 bDate := False;
 bTime := False;
 for i:=0 to Length(FDateFormat)-1 do
  begin
   case FDateFormat[i].TokenType of
     dfYYYY,
     dfYEAR,
     dfYY,
     dfQ,
     dfMONTH,
     dfMON,
     dfMM,
     dfM,
     dfRM,
     dfDDD,
     dfDD,
     dfDAY,
     dfDY,
     dfD,
     dfDW:
       bDate := True;

     dfH24,
     dfH,
     dfH12,
     dfHH24,
     dfHH,
     dfHH12,
     dfNN,
     dfN,
     dfS,
     dfSS,
     dfAMPM:
       bTime := True;
   end;
  end;
 if ((not bDate) and bTime) then
   Result := aftTime
 else
 if ((not bTime) and bDate) then
   Result := aftDate
 else
   Result := aftDateTime
end;


var i: integer;
begin
  // INIT DateFormatReservedWordsMaxLength value

  DateFormatReservedWordsMaxLength := 0;
  for i:=0 to DateFormatReservedWordsCount-1 do
   if length(DateFormatReservedWords[i]) > DateFormatReservedWordsMaxLength then
     DateFormatReservedWordsMaxLength := length(DateFormatReservedWords[i]);

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -