求两个时间相差,返回年月日应该如何写啊?

aa20000 2013-03-17 06:17:02
做个假设:
时间1:1991年2月15日
时间2: 2013年3月16日

希望得到两个时间的差距值,并以年月日返回。
...全文
581 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤独de猫 2013-03-18
  • 打赏
  • 举报
回复
TDate 和 TDateTime 都是Double类型,可以直接相减的,或者可以去 DateUtils 单元,这个单元是专门针对日期的操作。
aa20000 2013-03-18
  • 打赏
  • 举报
回复
var date1,date2:TDate; begin date1:=DateTimePicker1.Date; date2:=DateTimePicker2.Date; ShowMessage('共差'+IntToStr(DaysBetween(date1,date2))+'天'); 智能得到的是天数,但不是想象中的xxxx年xx月xx日的效果!
sololie 2013-03-18
  • 打赏
  • 举报
回复

var
  s, e: TTimeStamp;
  tt: Double;
begin
  s := DateTimeToTimeStamp(timeStart);
  e := DateTimeToTimeStamp(timeEnd);
  tt := (e.Time - s.Time) / 1000; // 得到两个时间相差了的秒数,自己举一反三
feiba7288 2013-03-18
  • 打赏
  • 举报
回复
这是你要的效果吗?

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DateUtils, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    DateTimePicker1: TDateTimePicker;
    DateTimePicker2: TDateTimePicker;
    DateTimePicker3: TDateTimePicker;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    function TimeBetween(A, B: TDateTime): string;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.Add(TimeBetween(DateTimePicker1.Date, DateTimePicker2.Date));
end;

function TForm1.TimeBetween(A, B: TDateTime): string;
var
  Y, M, Day: Integer;
  C, D: TDateTime;
  sA, sB: string;
begin
  if Trunc(A) > Trunc(B) then
  begin
    Result := 'Error';
    exit;
  end;

  if Trunc(A) = Trunc(B) then
  begin
    Result := '0Y0M0D';
    exit;
  end;

  Y := YearsBetween(B, A);

  M := MonthsBetween(B, A);
  M := M - Y * MonthsPerYear;
  Day := DaysBetween(B, A) - Trunc(Y * ApproxDaysPerYear) - Trunc(M * ApproxDaysPerMonth);
  Result := IntToStr(Y) +'Y'+ IntToStr(M) +'M'+ IntToStr(Day) +'D';
end;

end.
yct0605 2013-03-18
  • 打赏
  • 举报
回复
引用 3 楼 aa20000 的回复:
var date1,date2:TDate; begin date1:=DateTimePicker1.Date; date2:=DateTimePicker2.Date; ShowMessage('共差'+IntToStr(DaysBetween(date1,date2))+'天'); 智能得到的是天数,但不是想象中的xxxx年xx月xx日的效果!……
需要自己转换了,写个函数吧。
aa20000 2013-03-18
  • 打赏
  • 举报
回复
OK! TKS!
引用 8 楼 feiba7288 的回复:
引用 7 楼 aa20000 的回复: 引用 5 楼 feiba7288 的回复:这是你要的效果吗? Delphi/Pascal code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162unit Unit1;……
luxuewei5214 2013-03-18
  • 打赏
  • 举报
回复
YearsBetween,MonthsBetween,DaysBetween函数,记得引用DateUtils单元。不过Delphi5不支持这些函数,Delphi7有,delphi6不清楚
feiba7288 2013-03-18
  • 打赏
  • 举报
回复
引用 7 楼 aa20000 的回复:
引用 5 楼 feiba7288 的回复:这是你要的效果吗?

Delphi/Pascal code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162unit Unit1; interfa……


当然有;

aa20000 2013-03-18
  • 打赏
  • 举报
回复
引用 5 楼 feiba7288 的回复:
这是你要的效果吗? Delphi/Pascal code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162unit Unit1; interface uses Windows, Mes……
按你提供代码试过不行,不知道你有没测试过
憨厚小情郎 2013-03-17
  • 打赏
  • 举报
回复
select 日差=datediff(day,日期1,日期2) 这个是求两个日期之间的差的,返回是int,你要求的这个距离,就不知道了,关注下。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧