【问题标题】:How does Delphi calculate TDateTime as a Float value?Delphi 如何将 TDateTime 计算为浮点值?
【发布时间】:2015-01-28 05:28:55
【问题描述】:

我是Delphi 编程的新手。 在查看Delphi 中的Data Types 时,我发现了TDateTime

在我的测试应用程序中使用它时,我知道TDateTime 对象为我提供了Float\Double 值。

我对 TDateTime 它如何计算 Date TimeDouble 的值有点好奇。

下面是我使用的示例代码:

var
  LDateTime: TDateTime;
  LFloat: Double;
begin
   LDateTime := now;// current DateTime
   LFloat:= LDateTime; // provide me a float value   
end;

是否使用任何公式从 Windows 计算 Date and Time Value

谁能建议/向我提供有关TDateTime工作的更多信息?

提前致谢。

【问题讨论】:

  • 您是否尝试阅读documentation
  • 仅作记录,TDateTime 不是对象;它是type double 的typedef。来自 System.pastype TDateTime = type Double;。无需使用LFloat 进行任何类型的转换;可以直接使用TDateTime作为浮点值,如MyDate := Now + 10;(加10天)。

标签: delphi tdatetime


【解决方案1】:

浮点数表示自 1899 年 12 月 30 日以来的天数。所以 float value = 1 将是 31.12.1899, 2 = 01.01.1900 等等。时间被保存为一天的一小部分。 0.25 = 06:00, 0.5 = 12:00, 0.75 = 18.00 ...

所以 31.12.1899 12:00 将等于 1.5。

这使得 TDateTime 非常易于使用。要获得天数的差异,只需减去两个 DateTimes。

02.01.2015 - 01.01.2015 = 1

尽可能简单。要获得小时数的差异,只需乘以 24。

还可以查看 Unit DateUtils 中的函数。它们有时会派上用场。

【讨论】:

  • 另外,公式本身可以在单元 SysUtils 中的EncodeDate 下找到
  • 请注意,使用 TDateTime 作为 Double 是一个实现细节,应该避免。有很多处理 TDateTime 值的例程是 SysUtils 和 DateUtils。见Date and Time Support
【解决方案2】:

你正在寻找

function DateTimeToUnix(const AValue: TDateTime): Int64;

function UnixToDateTime(const AValue: Int64): TDateTime;

来自DateUtils.pas的函数

TDateTime值可以通过FormatDateTime函数格式化

//uses sysutils

var    
  k:double;    
  t:tdatetime    
begin    
  t:=UnixToDateTime(1483909200);    
  showmessage(datetostr(t));    
  t:=strtodate('08.01.2017');    
  k:=DateTimeToUnix(t);    
  showmessage(k.ToString);    
end;

【讨论】:

    猜你喜欢
    • 2011-06-28
    • 1970-01-01
    • 2020-01-03
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多