20020815000050和20020815000001两个字符串,如何相减的到差值49秒??(100分)

  • 主题发起人 主题发起人 song2
  • 开始时间 开始时间
S

song2

Unregistered / Unconfirmed
GUEST, unregistred user!
20020815000050和20020815000001两个字符串,如何相减的到差值49秒??
20020815000050和20020815000001两个字符串,如何相减的到差值49秒??
 
到底要做什么?照你的说法,取出两个字符串的最后两位,相减不就行了
 
把前面截掉不就完了
 
谢谢你的回复,我就是想两个格式为YYYYMMDDHHNNSS的字符串如何相减得到岔差值?
不能只取后两位减,因为差值超过60秒的呢?
 
把後面的部份EncodeTime( )
化成時間格式再運算!
 
应该使用strtodatetime之类的函数才可以,但我不会用!
 
to vine:
具体如何用?你说后面的,后面的多少位?
 
你还要不要计算天数,如果不用那就把时间取出来,做些处理转换成datatime格式,然后在
计算。下面的例子是计算时间的
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Buttons;
type
Twatch = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
RealTimeEdit: TEdit;
StartTimeEdit: TEdit;
EndTimeEdit: TEdit;
EllapseTimeEdit: TEdit;
StartButton: TBitBtn;
StopButton: TBitBtn;
Timer1: TTimer;
Timer2: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure StartButtonClick(Sender: TObject);
procedure StopButtonClick(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
watch: Twatch;
StartTime : TdateTime;
EllapseTime:TdateTime;
implementation
{$R *.DFM}
procedure Twatch.FormCreate(Sender: TObject);
begin
StopButton.Enabled := False;
//使停止按钮无效
RealTimeEdit.Text := TimeToStr(time);
//将组件的Text属性设置为当前时间
StartTimeEdit.Text := '00:00:00';
//将以下三个组件的Text属性设置为00:00:00
EndTimeEdit.Text := '00:00:00';
EllapseTimeEdit.text := '00:00:00';
Timer2.enabled:=false;
end;

procedure Twatch.Timer1Timer(Sender: TObject);
begin
RealTimeEdit.Text := TimeToStr(Time);
// 用当前时间刷新Text
end;

procedure Twatch.StartButtonClick(Sender: TObject);
begin
Timer2.Enabled := True;
StopButton.Enabled := true;
StartTime := Time;
StartTimeEdit.Text := TimeToStr(StartTime);
end;

procedure Twatch.StopButtonClick(Sender: TObject);
begin
Timer2.Enabled := False;
StopButton.Enabled := False;
end;

procedure Twatch.Timer2Timer(Sender: TObject);
Var
EndTime : TdateTime;
i,Hour,Minute,Second,MilliSec:Word;
HS,MS,SS,MSS : string[2];
begin
Endtime := Time;
//取当前时间
EllapseTime := Time - StartTime;
// 计算用去时间
EndTimeEdit.Text := TimeToStr(EndTime);
// 设置结束时间文本
DecodeTime(EllapseTime,Hour,Minute,Second,MilliSec);
//进行时间换算
Str(Hour:2,HS);
str(Minute:2,MS);
str(Second:2,SS);
for i := 1 to 2 do
begin
if hs = ' ' then
hs := '0';
if ms = ' ' then
ms := '0';
if ss = ' ' then
ss := '0';
end;
Str((MilliSec div 100):1,MSS);
EllapseTimeEdit.Text := hs+':'+ms+':'+ss+'.'+mss;
//显示用去时间
end;

end.
 
>>lcl_003
谢谢拟你的回答,我如何把字符串转换成日期时间格式?
如:20020815000050和20020815000001两个字符串,如何转换后相减?
谢谢!
 
以上的回答没有切中要害,因为时间的运算无论要多少位都好办,因为是固定的
60进位,我想笔者关心的是日期的运算,也是困难的部分,因为
日期的进位实在不好控制,仅仅相减会得到一个新的日期,
不会出现多少年,多少月,多少日 ,
这个问题我在实际的工作中也没有非常好的办法,自己编写了一个函数,
但也是不理想,比如闰年的2月和非闰年的2月求解就非常复杂,涉及到递归的算法和
循环套用,我有时都陷入一个圈圈内,比如考虑月是28,29天时可能会进位到年,但考虑
年就要截取月,但月,一进位月可能影响年,年一变,月就又不是原来的28或者29 天,
希望各位大侠提供好的建议和解决方案 。
 
还是先转换为DateTime后再计算好些。
至于如何转换成DateTime,你可以编写一个函数,先将串整理成标准的格式
yyyy-mm-dd hh:mm:ss
再调用Strtodatetime转换成DateTime.
 
procedure TForm1.Button1Click(Sender: TObject);
var
l_Time1, l_Time2: TDateTime;
{将字符串格式化成日期时间格式}
function Fmt_DateTime(a_DateStr: string): string;
begin
Result := Copy(a_DateStr, 1, 4) + '-' + Copy(a_DateStr, 5, 2) + '-' + Copy(a_DateStr, 7, 2)
+ ' ' + Copy(a_DateStr, 9, 2) + ':' + Copy(a_DateStr, 11, 2) + ':' + Copy(a_DateStr, 13, 2);
end;
begin
l_Time1 := StrToDateTime(Fmt_DateTime('20020815000050'));
{转换成日期时间}
l_Time2 := StrToDateTime(Fmt_DateTime('20020815000001'));
{转换成日期时间}
ShowMessage(FormatFloat('#0', (l_Time1 - l_Time2) * 24 * 60 * 60));
end;
 
将两个字符串全部转换成TDateTime型,然后相减:
Str1:='20020815001258';
Str2:='20020415030526';
Dt1:=EncodeDate(Copy(Str1, 1, 4)+'-'+Copy(Str1, 5, 2)+'-'+Copy(Str1, 7, 2))+EncodeTime(Copy(Str1, 9, 2)+'-'+Copy(Str1, 11, 2)+'-'+Copy(Str1, 13, 2));
Dt2:=EncodeDate(Copy(Str2, 1, 4)+'-'+Copy(Str2, 5, 2)+'-'+Copy(Str2, 7, 2))+EncodeTime(Copy(Str2, 9, 2)+'-'+Copy(Str2, 11, 2)+'-'+Copy(Str2, 13, 2));
Dc:=Dt2-Dt1;//差值
 
svw0506,的方法可以得到两个日期之间的天数,但无法得到几年几月几日的格式
watter, 的方方是错误的,且转换都有问题 。
希望大侠考虑一下得到日期之间的有“几年几月几日”的问题。
 
我遇到过同样的问题,你是不是变量定为integer,运算出错,将变量定为int64就可以了,
如果为负取绝对值。
 
将两个字符串全部转换成TDateTime型,然后相减:
trunc(date1)-trunc(date2)
 
我做了一下,字符串怎么转成TDateTime就不说。
time1 := StrToDateTime('2003-09-21 13:50:10');
time2 := StrToDateTime('2002-08-15 12:00:41');
time1 := time1 - time2;
str := DatetimeToStr(time1);
str的结果为:1-2-5 1:49:29
也就是1年2个月5天1小时49分29秒
再转成自己需要的格式了。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
S
回复
0
查看
765
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部