delphi计算两个时间差-转

摘要:
usesDateUtils;varS1,S2:字符串;T1,T2:TDateTime;D、 H、M、S:整数;值:Int64;开始S1:='2015/09/2315:44:50';S2:='2013/09/2216:47:51';T1:=StrToDateTime(S1);T2:=StrToDateTime(S2);值:=秒之间(T1,T2
uses DateUtils;
 
var
S1, S2: string;
T1, T2: TDateTime;
D, H, M, S: Integer;
Value: Int64;
begin
S1 := '2015/09/23 15:44:50';
S2 := '2013/09/22 16:47:51';
T1 := StrToDateTime(S1);
T2 := StrToDateTime(S2);
 
Value := SecondsBetween(T1, T2);
D := Value div SecsPerDay;                                  // 取一天有多少秒 
H := Value mod SecsPerDay div SecsPerHour;                  // 取一天有多少秒
M := Value mod SecsPerDay mod SecsPerHour div SecsPerMin;
S := Value mod SecsPerDay mod SecsPerHour mod SecsPerMin;
Caption := Format('%.2d天 %.2d:%.2d:%.2d', [D, H, M, S]); //%.2d没有两位补全,若没有'.'则显示实际位数
memo1.Lines.Add(caption);
end;

  

经过上面可以实现两个时间相减的功能,然后将其写成函数为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function GetSubDateTime(S1, S2:string): string;
var
  T1, T2: TDateTime;
  D, H, M, S: Integer;
  Value: Int64;
begin
  T1 := StrToDateTime(S1);
  T2 := StrToDateTime(S2);
  Value := SecondsBetween(T1, T2);
  D := Value div SecsPerDay;
  H := Value mod SecsPerDay div SecsPerHour;
  M := Value mod SecsPerDay mod SecsPerHour div SecsPerMin;
  S := Value mod SecsPerDay mod SecsPerHour mod SecsPerMin;
  result := Format('%.2d天 %.2d:%.2d:%.2d',[D, H, M, S]);
end;<br><br>调用:<br>var<br>Caption: string;<br>begin<br>  Caption := GetSubDateTime(S1, S2);<br>  memo1.liens.add(Caption);<br>end;

上面就可以直接调用函数计算差值,若要想计算动态的时间差值就使用一个计时器Timer,代码如下:

1
2
3
4
5
6
7
8
9
procedure TForm2.Timer1Timer(Sender: TObject);
var
  S1, S2: string;
begin
  S1 := FormatDateTime('yyyy/mm/dd hh:mm:ss', now());   // 我用的XE,所以提前出来的系统时间是这种格式
  S2 := '2015/9/22 01:02:03';                           // 这里时间要和获取到的系统时间一致
  GetSubDateTime(S1, S2);
  Memo1.Lines.Add(GetSubDateTime(S1, S2));
end;

  

免责声明:文章转载自《delphi计算两个时间差-转》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mtrace 简介如何用c语言调用c++做成的动态链接库下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SpringAOP获取请求信息

当需要在aop中获取请求的参数,并做拦截时,可以参考下面的方法: package com.zxh.configure; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.core.JsonProces...

c# 通过程序修改hosts文件

1 根据ip替换 var OSInfo =Environment.OSVersion; string pathpart = "hosts"; if (OSInfo.Platform ==PlatformID.Win32NT) { //is windows NT pathpart = "system32\drivers\etc\hosts";...

ant Form 常用 api

经过 Form.create 包装的组件将会自带 this.props.form 属性,this.props.form 提供的 API 如下: 注意:使用 getFieldsValue getFieldValue setFieldsValue 等时,应确保对应的 field 已经用 getFieldDecorator 注册过了。 方法      说明...

MySQL通过自定义函数以及存储过程实现递归查询父级ID

1.存储过程定义  存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译 2.为什么用存储过程实现树结构数据查询父级节点  1、能完成较复杂的运算与判断    2、可编程行强,灵活    3、SQL编程的代码可重复使用    4、预编译机制    5、减少...

MySQL分段统计SQL写法 与 Mybatis 异常 java.math.BigDecimal cannot be cast to java.lang.Integer

mysql> select -> sum(case when score<60 then 1 else 0 end) as '<60', -> sum(case when score>=60 and score<=69 then 1 else 0 end) as '60~69', -&...

Delphi写DLL要注意的问题 (转)

今天写一个dll准备给.net调用, dll写出之后给用delphi测试一下, 居然出错, 更别说给.net调用了.查来查去原来是参数和返回值使用string类型, 后面看了'Delphi 编写 DLL 返回字符串,.net 调用。' 这篇文章才解决, 顺便也收藏了一下,原来delphi写的dll有这么多限制的.   这一点我们需要注意  a. 参数和返回...