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

2016-02-19 13:23 8 1 收藏

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享根据时间日期格式从字符串中解析日期时间教程,希望对大家能有一点小小的帮助。

【 tulaoshi.com - 编程语言 】

根据时间日期格式从字符串中解析日期时间
  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;

来源:http://www.tulaoshi.com/n/20160219/1604054.html

延伸阅读
mysql SELECT something FROM tbl_name WHERE TO_DAYS(NOW()) – TO_DAYS(date_col) = 30; DAYOFWEEK(date) 返回 date 的星期索引(1 = Sunday, 2 = Monday, ... 7 = Saturday)。索引值符合 ODBC 的标准。 mysql SELECT DAYOFWEEK('1998-02-03′); - 3 WEEKDAY(date) 返回 date 的星期索引(0 = Monday, 1 = Tuesday, … 6 = Sunday): ...
标签: excel
Excel日期和时间函数 日期和时间函数 DATE 返回特定时间的系列数 DATEDIF 计算两个日期之间的年、月、日数 DATEVALUE 将文本格式的日期转换为系列数 DAY 将系列数转换为月份中的日 DAYS360 按每年360天计算两个日期之间的天数 EDATE 返回在开始日期之前或之后指定月数的某个日期的系列数 EOMONTH 返回...
Sql Server中的日期与时间函数 1.  当前系统日期、时间     select getdate()  2. dateadd  在向指定日期加上一段时间的基础上,返回新的 datetime 值    例如:向日期加上2天    select dateadd(day,2,'2004-10-15')  --返回:2004-10-17 00:00:00.000 3. datedif...
标签: 电脑入门
1、进入控制面板并点击时钟、语言和区域; 2、点击更改时间、日期或数字格式; 3、选择格式选项卡,在日期和时间格式中选择对应的下拉菜单对时间、日期的格式进行修改,修改后的结果可以在下边的示例中看到,若要进行详细的修改可以选择下方的其它设置; 4、进入自定义格式进行更详细的修改,例如修改上午符号为AM,下午符号为PM; ...
标签: word
word2010中插入时间及日期   我们在使用Word2010编辑文档的时候,有时需要在文档中插入日期和时间。本篇经验就介绍一下插入日期和时间的方法,希望对大家有帮助。 步骤/方法 打开Word2010文档,将光标移动到合适的位置。 单击插入选项卡。 在文本区单击日期和时间按钮。 在日期和时间对话框的可用格式...

经验教程

106

收藏

27
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部