• 时间与相关类型(1) TDateTime 与 Double


    //相关函数:
    SysUtils.FloatToDateTime();
    SysUtils.TryFloatToDateTime();
    

    在 System 单元定义有: TDateTime = type Double;

    看来 TDateTime 是一个 8 字节 64 位数据, 不过是 Double 的别名.


    {测试: TDateTime 就是一个 Double}
    var
      t: TDateTime;
      d: Double;
      s: string;
    begin
      t := EncodeDateTime(2009, 5, 22, 11, 22, 33, 999);
    
      {强制转换}
      d := Double(t);
      ShowMessage(FloatToStr(d)); //39955.4740046181
    
      {隐式转换}
      d := t;
      ShowMessage(FloatToStr(d)); //39955.4740046181
    
      {不必转换}
      ShowMessage(FloatToStr(t)); //39955.4740046181
    
      {直接把一个 Double 当作 TDateTime 看待}
      s := FormatDateTime('yyyy-m-d h:m:s:z', 39955.4740046181);
      ShowMessage(s);             //2009-5-22 11:22:33:999
    end;
    

    不会是任何一个 Double 都会转换成一个合法的时间, SysUtils 单元给出了最小与最大时间的常数:
    const
      MinDateTime: TDateTime = -657434.0;      { 01/01/0100 12:00:00.000 AM }
      MaxDateTime: TDateTime =  2958465.99999; { 12/31/9999 11:59:59.999 PM }
    

    保险起见, 应该通过: FloatToDateTime(); 或 TryFloatToDateTime(); 把一个数转换到 TDateTime;
    反向转换就没必要用函数了.
    {使用 TryFloatToDateTime}
    var
      t: TDateTime;
      d: Double;
    begin
      d := 0;
      if TryFloatToDateTime(d, t) then
        ShowMessage(DateTimeToStr(t)); //1899-12-30
    end;
    
    {使用 FloatToDateTime; 转换失败或遇到非法时间时会抛出异常}
    var
      t: TDateTime;
      d: Double;
    begin
      d := 0;
      t := FloatToDateTime(d);
      ShowMessage(DateTimeToStr(t)); //1899-12-30
    end;
    
    {当时间是 1899年12月30日 0时0分0秒 0毫秒时, TDateTime 对应的时间值是 0}
    var
      d: Double;
      t: TDateTime;
    begin
      t := StrToDateTime('1899-12-30 0:0:0:0');
      d := Double(t);
      ShowMessage(FloatToStr(d)); //0
    end;
    
  • 相关阅读:
    splay复杂度的证明
    splay的写法
    洛谷 P3722 [AH2017/HNOI2017]影魔
    洛谷 P4770 [NOI2018]你的名字
    清北考前刷题day3下午好
    P3043 [USACO12JAN]牛联盟Bovine Alliance(并查集)
    bzoj3252攻略(线段树+dfs序)
    清北考前刷题day2早安
    清北考前刷题day2下午好
    清北考前刷题day1下午好
  • 原文地址:https://www.cnblogs.com/del/p/1486876.html
Copyright © 2020-2023  润新知