文档章节

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

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

 
 
 
 
 

 

 

  

© 著作权归作者所有

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 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

System.DateUtils Range checking functions部分函数示例及说明

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

张乐1024 ⋅ 2015/09/18 ⋅ 0

System.DateUtils Range checking functions部分函数示例及说明

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

张乐1024 ⋅ 2015/09/19 ⋅ 0

FastScript脚本使用白皮书(Ver1.0)

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

vga ⋅ 2015/01/13 ⋅ 0

Java为什么需要保留基本数据类型

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

札小白 ⋅ 2014/07/27 ⋅ 0

网格控件Inspex

Inspex 是一个先进的原生VCL网格控件集,用于检查你的程序中的对象和其他数据类型。从编辑名称-值对列表的轻量级 TIxItemListEditor,到先进的用来检查对象和组件所有发布的属性的 TIxObjec...

javascript1 ⋅ 2014/06/05 ⋅ 0

替Java省点内存

某些Java程序是CPU密集型的,但它们会需要大量的内存。这类程序通常运行得很缓慢,因为它们对内存的需求很大。为了能提升这类应用的性能,可得给它们多留点内存。因此,假设我们有一台拥有1...

devion ⋅ 2015/12/17 ⋅ 0

delphi 几个string 处理函数

function IntToStr(Value: Integer): string;overload; function IntToHex(Value: Integer; Digits: Integer): string; overload; function StrToInt(const S: string): Integer; function T......

jingshishengxu ⋅ 2010/11/20 ⋅ 0

Java之基本数据类型的封装类

基本数据类型 封装类 boolean Boolean byte Byte short Short int Integer long Long char Character float Float double Double 基本数据类型的封装类 1.基本类型的封装类(wrapper)用来存储...

Aaron_DMC ⋅ 2016/12/15 ⋅ 0

Date-Calcendar-DateFormat-System-Math

一.Date类(java.util) 作用:表示时间的类,精确到毫秒,以GMT 1970年1月1日0点0分0秒起算 构造方法: Data() ---获取当前时间 Date(long time)---计算时间,结果为=time+GMT 1970年1月1日0点0分0...

老胡2015 ⋅ 2017/06/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部