09:12:03,怎么知道是在08:00:00-22:00:00 之间
请高手指教;
不想通过下面的方式来实现;
dt1:=StrToTime( '23:02:03 ');
if (dt1>StrToTime( '08:00:00 ')) and (dt1<StrToTime( '22:00:00 ')) then
showmessage('时间在08——22')
else
begin
if (dt1>StrToTime( '22:00:00 ')) or (dt1<StrToTime( '08:00:00 ')) then
showmessage('时间在22——08');
end
19 个解决方案
#1
Use DateUntis;
var
Hour : Word;
begin
Hour := HourOf(dt1); //得到小时
然后
if (Hour>=8) and (Hour<=23);
.....
var
Hour : Word;
begin
Hour := HourOf(dt1); //得到小时
然后
if (Hour>=8) and (Hour<=23);
.....
#2
补充一下,还要比较分钟和秒的话,MinuteOf,SecondOf,
或者干脆用DecodeTime
或者干脆用DecodeTime
#3
procedure TForm1.Button1Click(Sender: TObject);
var
dt1,dt2:TDateTime;
begin
dt1:=StrToTime('23:02:03');
dt2:=StrToTime('08:02:03');
Case InOutTimeJudge(dt1,dt2) of
1:showmessage('都在第一段');
2:showmessage('都在第二段');
3:showmessage('第一段进,第二段出');
4:showmessage('第二段进,第一段出');
end;
end;
Function TForm1.InOutTimeJudge(InDateT,OutDateT:TDateTime):Integer;
var
sign:Integer;
begin
sign:=TimeISJudge(InDateT);
if TimeISJudge(InDateT)=TimeISJudge(OutDateT) then
begin
if sign=1 then Result:=1; //二个时间都在第一段
if sign=2 then Result:=2; //二个时间都在第二段
end
else
begin
if sign=1 then Result:=3; //第一段进,第二段出
if sign=2 then Result:=4; //第二段进,第一段出
end;
end;
Function TForm1.TimeISJudge(DateT:TDateTime):Integer;
begin
if (DateT>StrToTime( '08:00:00 ')) and (DateT<StrToTime( '22:00:00 ')) then
Result:=1
else
begin
if (DateT>StrToTime( '22:00:00 ')) or (DateT<StrToTime( '08:00:00 ')) then
Result:=2;
end
end;
var
dt1,dt2:TDateTime;
begin
dt1:=StrToTime('23:02:03');
dt2:=StrToTime('08:02:03');
Case InOutTimeJudge(dt1,dt2) of
1:showmessage('都在第一段');
2:showmessage('都在第二段');
3:showmessage('第一段进,第二段出');
4:showmessage('第二段进,第一段出');
end;
end;
Function TForm1.InOutTimeJudge(InDateT,OutDateT:TDateTime):Integer;
var
sign:Integer;
begin
sign:=TimeISJudge(InDateT);
if TimeISJudge(InDateT)=TimeISJudge(OutDateT) then
begin
if sign=1 then Result:=1; //二个时间都在第一段
if sign=2 then Result:=2; //二个时间都在第二段
end
else
begin
if sign=1 then Result:=3; //第一段进,第二段出
if sign=2 then Result:=4; //第二段进,第一段出
end;
end;
Function TForm1.TimeISJudge(DateT:TDateTime):Integer;
begin
if (DateT>StrToTime( '08:00:00 ')) and (DateT<StrToTime( '22:00:00 ')) then
Result:=1
else
begin
if (DateT>StrToTime( '22:00:00 ')) or (DateT<StrToTime( '08:00:00 ')) then
Result:=2;
end
end;
#4
你这个方法好像是不行,22点到次日08点判断应该会有问题的,还要加条件进去
#5
不好意思,刚才引用错了
你这个方法好像是不行,22点到次日08点判断应该会有问题的,还要加条件进去
你这个方法好像是不行,22点到次日08点判断应该会有问题的,还要加条件进去
#6
加条件就比较整数部分,及日期部分
#7
用Delphi的日期函数date()获得系统的日期,Delphi还有几个与日期有关的函数。
#8
除了LZ的 判断方法 还真不知道别的了
一起等待答案
一起等待答案
#9
加上日期吧,否则很别扭
#10
换个角度思考,
要证明时间点在时间断的范围内,
其实也就是判断时间点不在范围外.
钟表都是圆形的.
你只要证明他不在外边,那就是在里边了.
要证明时间点在时间断的范围内,
其实也就是判断时间点不在范围外.
钟表都是圆形的.
你只要证明他不在外边,那就是在里边了.
#11
日期时间本来就是浮点型的,次日的你索性,就加上24.00.然后判断数字大小.
#12
使用完整的时间,即:日期+时间。如:211-06-27 Am 4:21:00
#13
其实还是用的StrToDateTime的方式
#14
参考下这个吧
用这个语句就可取到日期
select CONVERT(varchar(12) , 你的日期字段, 108 ) as 时间段
11:06:08
‘08:00:00’<=时间段>=‘12:59:59’
select CONVERT(varchar(12) , getdate(), 101 )
09/12/2004
select CONVERT(varchar(12) , getdate(), 103 )
12/09/2004
select CONVERT(varchar(12) , getdate(), 104 )
12.09.2004
select CONVERT(varchar(12) , getdate(), 105 )
12-09-2004
select CONVERT(varchar(12) , getdate(), 106 )
12 09 2004
select CONVERT(varchar(12) , getdate(), 107 )
09 12, 2004
select CONVERT(varchar(12) , getdate(), 108 )
11:06:08
select CONVERT(varchar(12) , getdate(), 109 )
09 12 2004 1
select CONVERT(varchar(12) , getdate(), 110 )
09-12-2004
select CONVERT(varchar(12) , getdate(), 113 )
12 09 2004 1
select CONVERT(varchar(12) , getdate(), 114 )
11:06:08.177
用这个语句就可取到日期
select CONVERT(varchar(12) , 你的日期字段, 108 ) as 时间段
11:06:08
‘08:00:00’<=时间段>=‘12:59:59’
#15
时间 实际上是一个 Double
时间字符串转换成 时间类型直接 比较就行了。。
时间字符串转换成 时间类型直接 比较就行了。。
#16
嗯,比较小数就行了,但要经过小时、天转换计算。
#17
日期型本来就可以比较大小的吧??
#18
晕倒。。。。。。
还要搞到SQL中去
你太牛了
还要搞到SQL中去
你太牛了
#19
最后还是按照自己的算法来做,谢谢大家!
#20
#1
Use DateUntis;
var
Hour : Word;
begin
Hour := HourOf(dt1); //得到小时
然后
if (Hour>=8) and (Hour<=23);
.....
var
Hour : Word;
begin
Hour := HourOf(dt1); //得到小时
然后
if (Hour>=8) and (Hour<=23);
.....
#2
补充一下,还要比较分钟和秒的话,MinuteOf,SecondOf,
或者干脆用DecodeTime
或者干脆用DecodeTime
#3
procedure TForm1.Button1Click(Sender: TObject);
var
dt1,dt2:TDateTime;
begin
dt1:=StrToTime('23:02:03');
dt2:=StrToTime('08:02:03');
Case InOutTimeJudge(dt1,dt2) of
1:showmessage('都在第一段');
2:showmessage('都在第二段');
3:showmessage('第一段进,第二段出');
4:showmessage('第二段进,第一段出');
end;
end;
Function TForm1.InOutTimeJudge(InDateT,OutDateT:TDateTime):Integer;
var
sign:Integer;
begin
sign:=TimeISJudge(InDateT);
if TimeISJudge(InDateT)=TimeISJudge(OutDateT) then
begin
if sign=1 then Result:=1; //二个时间都在第一段
if sign=2 then Result:=2; //二个时间都在第二段
end
else
begin
if sign=1 then Result:=3; //第一段进,第二段出
if sign=2 then Result:=4; //第二段进,第一段出
end;
end;
Function TForm1.TimeISJudge(DateT:TDateTime):Integer;
begin
if (DateT>StrToTime( '08:00:00 ')) and (DateT<StrToTime( '22:00:00 ')) then
Result:=1
else
begin
if (DateT>StrToTime( '22:00:00 ')) or (DateT<StrToTime( '08:00:00 ')) then
Result:=2;
end
end;
var
dt1,dt2:TDateTime;
begin
dt1:=StrToTime('23:02:03');
dt2:=StrToTime('08:02:03');
Case InOutTimeJudge(dt1,dt2) of
1:showmessage('都在第一段');
2:showmessage('都在第二段');
3:showmessage('第一段进,第二段出');
4:showmessage('第二段进,第一段出');
end;
end;
Function TForm1.InOutTimeJudge(InDateT,OutDateT:TDateTime):Integer;
var
sign:Integer;
begin
sign:=TimeISJudge(InDateT);
if TimeISJudge(InDateT)=TimeISJudge(OutDateT) then
begin
if sign=1 then Result:=1; //二个时间都在第一段
if sign=2 then Result:=2; //二个时间都在第二段
end
else
begin
if sign=1 then Result:=3; //第一段进,第二段出
if sign=2 then Result:=4; //第二段进,第一段出
end;
end;
Function TForm1.TimeISJudge(DateT:TDateTime):Integer;
begin
if (DateT>StrToTime( '08:00:00 ')) and (DateT<StrToTime( '22:00:00 ')) then
Result:=1
else
begin
if (DateT>StrToTime( '22:00:00 ')) or (DateT<StrToTime( '08:00:00 ')) then
Result:=2;
end
end;
#4
你这个方法好像是不行,22点到次日08点判断应该会有问题的,还要加条件进去
#5
不好意思,刚才引用错了
你这个方法好像是不行,22点到次日08点判断应该会有问题的,还要加条件进去
你这个方法好像是不行,22点到次日08点判断应该会有问题的,还要加条件进去
#6
加条件就比较整数部分,及日期部分
#7
用Delphi的日期函数date()获得系统的日期,Delphi还有几个与日期有关的函数。
#8
除了LZ的 判断方法 还真不知道别的了
一起等待答案
一起等待答案
#9
加上日期吧,否则很别扭
#10
换个角度思考,
要证明时间点在时间断的范围内,
其实也就是判断时间点不在范围外.
钟表都是圆形的.
你只要证明他不在外边,那就是在里边了.
要证明时间点在时间断的范围内,
其实也就是判断时间点不在范围外.
钟表都是圆形的.
你只要证明他不在外边,那就是在里边了.
#11
日期时间本来就是浮点型的,次日的你索性,就加上24.00.然后判断数字大小.
#12
使用完整的时间,即:日期+时间。如:211-06-27 Am 4:21:00
#13
其实还是用的StrToDateTime的方式
#14
参考下这个吧
用这个语句就可取到日期
select CONVERT(varchar(12) , 你的日期字段, 108 ) as 时间段
11:06:08
‘08:00:00’<=时间段>=‘12:59:59’
select CONVERT(varchar(12) , getdate(), 101 )
09/12/2004
select CONVERT(varchar(12) , getdate(), 103 )
12/09/2004
select CONVERT(varchar(12) , getdate(), 104 )
12.09.2004
select CONVERT(varchar(12) , getdate(), 105 )
12-09-2004
select CONVERT(varchar(12) , getdate(), 106 )
12 09 2004
select CONVERT(varchar(12) , getdate(), 107 )
09 12, 2004
select CONVERT(varchar(12) , getdate(), 108 )
11:06:08
select CONVERT(varchar(12) , getdate(), 109 )
09 12 2004 1
select CONVERT(varchar(12) , getdate(), 110 )
09-12-2004
select CONVERT(varchar(12) , getdate(), 113 )
12 09 2004 1
select CONVERT(varchar(12) , getdate(), 114 )
11:06:08.177
用这个语句就可取到日期
select CONVERT(varchar(12) , 你的日期字段, 108 ) as 时间段
11:06:08
‘08:00:00’<=时间段>=‘12:59:59’
#15
时间 实际上是一个 Double
时间字符串转换成 时间类型直接 比较就行了。。
时间字符串转换成 时间类型直接 比较就行了。。
#16
嗯,比较小数就行了,但要经过小时、天转换计算。
#17
日期型本来就可以比较大小的吧??
#18
晕倒。。。。。。
还要搞到SQL中去
你太牛了
还要搞到SQL中去
你太牛了
#19
最后还是按照自己的算法来做,谢谢大家!