StrToTime函数和time函数怎么做判断

baody8 2018-09-12 04:19:09
if time = StrTotime('11:20:10') then
为大于,小于都OK,就是不能等于,它会完失效
...全文
597 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueStorm 2018-09-27
  • 打赏
  • 举报
回复
如果要精确到毫秒,可以写为:if FormatDateTime('hh:nn:ss.zzz', Now) = '11:20:10.000' then
lyhoo163 2018-09-27
  • 打赏
  • 举报
回复
引用 17 楼 DelphiGuy 的回复:
[quote=引用 15 楼 lyhoo163 的回复:]
https://blog.csdn.net/lyhoo163/article/details/82820263

非常报谦,文章链接搞错了。重发!


你的代码存在不确定性,比如:
var
t1, t2: TDateTime;
begin
t1 := 0.473993059; // 0.4739930599999999
t2 := 0.473993069; // 0.4739930699999999
writeln(Format('%0.16f', [t2 - t1]));
writeln(FormatDateTime('hh:nn:ss.zzz', t1), ' ', FormatDateTime('hh:nn:ss.zzz', t2));
writeln(DateTimeCompare(t1, t2)); // 0
end;

差值刚好是0.00000001的情况下就可能出现问题。
[/quote]


感谢“早打大打打核战争”提出意见,现修改代码:
function DataTimeCompare(D1,D2:TDateTime):integer;  // 0等于 1大于 -1小于
var k:Double;
begin
Result:=0;
K:=abs(D1-D2);
if (K>=0) and (K<0.0000000099999999) then Result:=0
else begin
if (D1-D2)>=0 then Result:=1
else Result:=-1;
end;
end;


原文:
https://blog.csdn.net/lyhoo163/article/details/82820263
但是使用TDateTime类型,只要不通过Float转换,对毫秒级之后小数可以......
  • 打赏
  • 举报
回复
引用 15 楼 lyhoo163 的回复:
https://blog.csdn.net/lyhoo163/article/details/82820263

非常报谦,文章链接搞错了。重发!


你的代码存在不确定性,比如:
var
t1, t2: TDateTime;
begin
t1 := 0.473993059; // 0.4739930599999999
t2 := 0.473993069; // 0.4739930699999999
writeln(Format('%0.16f', [t2 - t1]));
writeln(FormatDateTime('hh:nn:ss.zzz', t1), ' ', FormatDateTime('hh:nn:ss.zzz', t2));
writeln(DateTimeCompare(t1, t2)); // 0
end;

差值刚好是0.00000001的情况下就可能出现问题。
lyhoo163 2018-09-26
  • 打赏
  • 举报
回复
https://blog.csdn.net/lyhoo163/article/details/82820263

非常报谦,文章链接搞错了。重发!
  • 打赏
  • 举报
回复
你这链接发的有问题吧
lyhoo163 2018-09-24
  • 打赏
  • 举报
回复
来碗阳春面 2018-09-23
  • 打赏
  • 举报
回复
uses DateUtils;

DateTimeToUnix(Now)

对比最好都转为时间戳,再对比,比较通用。

StrTotime('11:20:10'),这个时间格式受windows系统设置影响,虽然可以在程序固定下来。
lyhoo163 2018-09-23
  • 打赏
  • 举报
回复
通过DataTimeCompare,你的问题这样使用:

var T1:TTime;
begin
T1 := EncodeTime(11, 20,10, 0);
if DataTimeCompare(Time,T1)=0 then
........
end;
lyhoo163 2018-09-23
  • 打赏
  • 举报
回复
我刚定的博客《TDateTime 比较》,已详细说明。
https://mp.csdn.net/postedit/82820263
Frank.WU 2018-09-22
  • 打赏
  • 举报
回复
你得直接比较时间类型,而不是比较字符串类型,这不是一个好的方法,而且危险。
CableFan 2018-09-21
  • 打赏
  • 举报
回复
比较字符串是不靠谱的,时间有格式,会受系统区域设置影响。你用StrToTime转换后比较不相等,可能是因为日期部分不相等,因为只提供了时间,日期可能会默认为0(Delphi的0日期是1899-12-31)。你可以试试转为时间之后两边都来个截取小数,即: if frac(time) = frac(StrTotime('11:20:10')) then
jjpweb 2018-09-20
  • 打赏
  • 举报
回复
time是有毫秒的
lyhoo163 2018-09-18
  • 打赏
  • 举报
回复
TDatetime是一个double型,整数部分分解为日期,小数部分分解为时间。
对于double,比较数据,可以和大于或小于,不宜使用等于,因为是double型,是精度上,一般得不到完同(相等的值),表现出无意义。
这样, if time = StrTotime('11:20:10') 条件基本不成立。
使用时,可以通过比较两值的差(或绝对值)比较好: if time-StrTotime('11:20:10')<0.001 then
或者通过比较字符:if FormatDateTime('hh:nn:ss', Now) = '11:11:11' then
这样条件就可以存在了(有意义 )。
泓锜 2018-09-14
  • 打赏
  • 举报
回复
if timetostr(time)='20:54:50' then也可以 推荐这个:if FormatDateTime('hh:nn:ss', Now) = '20:56:10' then
秋天之落叶 2018-09-13
  • 打赏
  • 举报
回复
if timetostr(time)='11:20:10' then
建议还是使用>=或者<=更保险一些。
BlueStorm 2018-09-12
  • 打赏
  • 举报
回复
if FormatTime('hh:nn:ss', Now) = '11:20:10' then
BlueStorm 2018-09-12
  • 打赏
  • 举报
回复
更正: if FormatDateTime('hh:nn:ss', Now) = '11:20:10' then
baody8 2018-09-12
  • 打赏
  • 举报
回复
自己顶顶,求高人

5,379

社区成员

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

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