delphi 如何比较两个时间字符串的大小?

椰子天涯 2011-05-07 10:06:02
Arr: array of string;
数组Arr[1]中存放的是时间 现在想用Arr[1]和当前系统时间DateToStr(now)比较然后输出不同的内容
if (Arr[1] < DateToStr(now)) then
begin
Image1.Canvas.Font.Color := clred
end;
if (Arr[1] >= DateToStr(now)) then
begin
Image1.Canvas.Font.Color :=clgreen;
end;

请问这样写错误在哪里?
...全文
447 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝色光芒 2011-05-08
  • 打赏
  • 举报
回复
之所以要用Trunc(),考虑到浮点数奇偶位而已,碰巧的情况下,n和m本来值一样,但是去不相等,如果只比较日期,建议用上Trunc()
椰子天涯 2011-05-07
  • 打赏
  • 举报
回复
非常感谢大家
椰子天涯 2011-05-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sailxia 的回复:]
更正一下代码。。。

Delphi(Pascal) code
var
D0, D1: TDateTime;
begin
D0 := StrToDateTime('2011-05-02');
D1 := StrToDateTime('2011-05-01');
if D0 > D1 then
ShowMessage(DateTimeToStr(D0))
……
[/Quote]
可以 这样也不错
hongss 2011-05-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sailxia 的回复:]
更正一下代码。。。

Delphi(Pascal) code
var
D0, D1: TDateTime;
begin
D0 := StrToDateTime('2011-05-02');
D1 := StrToDateTime('2011-05-01');
if D0 > D1 then
ShowMessage(DateTimeToStr(D0))
……
[/Quote]

+1

TDateTime类型可以当作浮点型数据直接进行比较
Frank.WU 2011-05-07
  • 打赏
  • 举报
回复
更正一下代码。。。
var
D0, D1: TDateTime;
begin
D0 := StrToDateTime('2011-05-02');
D1 := StrToDateTime('2011-05-01');
if D0 > D1 then
ShowMessage(DateTimeToStr(D0))
else
ShowMessage(DateTimeToStr(D1))
end;
Frank.WU 2011-05-07
  • 打赏
  • 举报
回复
日期直接比较就可以了吧?还转来转去的?
例如:
var
D0,D1:TDateTime;
begin
D0 := StrToDateTime('2011-05-01');
D1 := StrToDateTime('2011-05-01');
if D0 > D1 then
ShowMessage(DateTimeToStr(D0)) else
ShowMessage(DateTimeToStr(D1))
end;
椰子天涯 2011-05-07
  • 打赏
  • 举报
回复
To kiboisme(蓝色光芒) :

Trunc(StrToDate(Arr[1])) < Trunc(now) 这样可以

我的Arr是存储的是2011-5-7

请问Trunc(now)得到的是2011-5-7呢? 还是201157 ? 还是20110507?
椰子天涯 2011-05-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kiboisme 的回复:]
if (DateToStr(Arr[1]) < now then

如果不比较时间,只比较日期,最好带上Trunc
if (Trunc(DateToStr(Arr[1])) < Trunc(now) then
[/Quote]

是之比较年月日的 不用比较时间
椰子天涯 2011-05-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
得看你Arr是如何存储的了,是 2001-1-1还是2001-01-01呢,这个你要和DateToStr格式相同才能正确比较
[/Quote]

是 2011-5-7 这样子的
蓝色光芒 2011-05-07
  • 打赏
  • 举报
回复
晕,打错了,是StrToDate

如果考虑容错性,建议用
StrToDateDef(Arr[1] , 0)
蓝色光芒 2011-05-07
  • 打赏
  • 举报
回复
if (DateToStr(Arr[1]) < now then

如果不比较时间,只比较日期,最好带上Trunc
if (Trunc(DateToStr(Arr[1])) < Trunc(now) then

bdmh 2011-05-07
  • 打赏
  • 举报
回复
得看你Arr是如何存储的了,是 2001-1-1还是2001-01-01呢,这个你要和DateToStr格式相同才能正确比较

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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