文档章节

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

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 331
阅读 4
收藏 0
//相关函数:
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;

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/05/22/1486876.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
delphi的日期相加/delphi日期运算

delphi的日期相加/delphi日期运算 分类: DELPHI 我想实現 2007-08-13 12:00:00 与45 的结果变为 2007-08-13 12:45:00 delhpi中日期型数据是可以直接相加减的。 如果是字符串,用StrToDateTi...

vga
2014/01/27
0
0
System.DateUtils Range checking functions部分函数示例及说明

该篇文章主要是对DelphiXE8的System.DateUtils单元中Range checking functions部分的函数进行调用示例及说明,如有不对之处还望大家可以提出,本人予以改正! 本部分的函数都需要传入三个参数...

张乐1024
2015/09/18
28
0
System.DateUtils Range checking functions部分函数示例及说明

该篇文章主要是对DelphiXE8的System.DateUtils单元中Range query functions部分的函数进行调用示例及说明,如有不对之处还望大家可以提出,本人予以改正! 本部分的函数都需要传入两个参数并...

张乐1024
2015/09/19
22
0
FastScript脚本使用白皮书(Ver1.0)

〖转载〗FastScript脚本使用白皮书(Ver1.0) 1. 可以使用的对象如下: 1.1. 原始类: Tobject, TPersistent ,TList, TStrings, TStringList, TStream, TFileStream, TMemoryStream, TCompon......

vga
2015/01/13
0
0
Java为什么需要保留基本数据类型

基本数据类型对以数值计算为主的应用程序来说是必不可少的。 自从1996年Java发布以来,基本数据类型就是Java语言的一部分。John Moore通过对使用基本类型和不使用基本类型做java基准测试给J...

札小白
2014/07/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

异步化,高并发大杀器

今天来聊聊如何让项目异步化的一些事。 在进入正文之前,顺便给大家推荐一个Java架构方面的交流学习群:698581634,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分...

Java大蜗牛
9分钟前
0
0
织梦dedecms安全设置

网站本身做好防范: 1、修改默认后台名。 打开网站根目录,找到[dede],这个文件夹就是后台的路径,可以随意修改,比如修改为[adminbuy],此时后台登陆的路径为:http://www.*****.com/admi...

雨季2014
10分钟前
0
0
完美Python入门基础知识点总结,看完你的Python就完全入门了!

Python标识符 在 Python 里,标识符有字母、数字、下划线组成。 在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。 Python 中的标识符是区分大小写的。 以下划线...

糖宝lsh
16分钟前
0
0
Java关于前后台传输中文乱码以及Excel下载乱码解决

针对乱码,一般情况是前后台以及中间件编码格式不同导致.故需要保证编码格式相同即可. 1.前台页面格式指定,这里用的是jsp,故需要将pageEncoding指定为"UTF-8" 2.指定服务器编码格式,比如用的t...

勤奋的蚂蚁
18分钟前
0
0
Flutter组件 - Flexible

Flexible是一个控制Row、Column、Flex等子组件如何布局的组件。 Flexible组件可以使Row、Column、Flex等子组件在主轴方向有填充可用空间的能力(例如,Row在水平方向,Column在垂直方向),但是...

一箭落旄头
21分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部