WEB开发网
开发学院软件开发Delphi 根据时间日期格式从字符串中解析日期时间 阅读

根据时间日期格式从字符串中解析日期时间

 2006-02-04 13:54:30 来源:WEB开发网   
核心提示:根据时间日期格式从字符串中解析日期时间function StrToDtFmt(const S, Fmt: String; Dft: TDateTime): TDateTime;function StrToDtFmt(const S, Fmt: String; Dft: TDateTime): TDateTime;var
根据时间日期格式从字符串中解析日期时间
function StrToDtFmt(const S, Fmt: String; Dft: TDateTime): TDateTime;

function StrToDtFmt(const S, Fmt: String; Dft: TDateTime): TDateTime;
var
  Pts: array[1..10] of Integer;
  Wds: array[1..10] of Integer;
  Vls: array[1..10] of Word;
  i, j, n, m, k, d: Integer;
  t: String;
  c: Char;
  dt: TDateTime;
begin
  // 只处理数字格式的日期和时间
  i := 1;
  n := 1;  
  t := Trim(AnsiUpperCase(Fmt));
  // 解析格式串
  while i <= Length(t) do
  begin
   case t[i] of
    'Y': Pts[n] := 1;
    'M': Pts[n] := 2;
    'D': Pts[n] := 3;
    'H': Pts[n] := 4;
    'N': Pts[n] := 5;
    'S': Pts[n] := 6;
    'Z': Pts[n] := 7;
    else
    begin
     i := i + 1;
     Continue;
    end;
   end;
   c := t[i];
   i := i + 1;
   m := 1;
   while t[i] = c do
   begin
    Inc(i);
    Inc(m);
   end;
   if t[i] in ['Y','M','D','H','N','S','Z'] then
    Wds[n] := m
   else
    Wds[n] := 0;
   n := n + 1;
   if n > 7 then Break;
  end;
  n := n - 1;
  // 开始转化
  Result := Dft;
  if Length(S) <= 0 then Exit;
  DecodeDate(Result, Vls[1], Vls[2], Vls[3]);
  DecodeTime(Result, Vls[4], Vls[5], Vls[6], Vls[7]);
  m := 1;
  i := 1;
  k := Length(S);
  while m <= n do
  begin
   while not (S[i] in ['0'..'9', #0]) do Inc(i);
   if i > k then Break;
   d := 0;
   j := i;
   while (S[i] in ['0'..'9']) and
    ((Wds[m] <= 0) or (i - j < Wds[m])) do
   begin
    d := d * 10 + Ord(S[i]) - Ord('0');
    i := i + 1;
   end;
   Vls[Pts[m]] := d;
   if i > k then Break;
   m := m + 1;
  end;
  if TryEncodeDate(Vls[1], Vls[2], Vls[3], dt) then
   Result := Int(dt) + Frac(Result);
  if TryEncodeTime(Vls[4], Vls[5], Vls[6], Vls[7], dt) then
   Result := Int(Result) + Frac(dt);
end;

Tags:根据 时间 日期

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接