求时间段切分的程序算法(100分)

  • 主题发起人 主题发起人 盛利
  • 开始时间 开始时间

盛利

Unregistered / Unconfirmed
GUEST, unregistred user!
现有时间段,如
P1=7:00:00
p2=12:00:00
p3=22:00:00
有任意的开始和结束时间,请问怎么把开始结束时间
按时间段切分开
 
能举个例子看看是怎么个切分法吗?
 
P1=7:00:00-12:00:00
p2=12:00:00-22:00:00
p3=22:00:00-次日7:00:00
比如开始时间10点结束时间15点
那么切分的结果就是
10点-12点
12点-15点
再比如6点到次日2点
那么切分结果是
6点到7点
7点到12点
12点到22点
22点到次日2点
基本就是这样的,请高手赐教,最好能实现动态个数的时间段,我现在分3段
 
应该采用递归算法!先使用Case of 然后在对应值里采用递归,直到完成!
 
这样不好嘛?
P1=7:00:00
p2=12:00:00
p3=22:00:00
p4=次日7:00:00
切分时,时间分隔点和要分隔的时间前面都加上统一的日期,
相减就知道是否包含切分点。
 
to jsxjd:如果从23:00 to 次日13:00怎么办
是不是又要p5了
 
一天分四段:
P1: 0:00
P2: 7:00
P3:12:00
P4:22:00
P5:24:00
每天都是重复,超过24就-24在重复付值
 
我做出来了,不知道和lldhz的想法是否类似?
procedure TForm1.Button1Click(Sender: TObject);
var
part: array[1..5] of Tdatetime;
i, ks, js: integer;
begin
part[1] := strtotime('0:00');
part[2] := strtotime('7:00');
part[3] := strtotime('12:00');
part[4] := strtotime('22:00');
part[5] := strtotime('23:59');
ks := 0;
js := 0;
for i := 2 to 4 do
begin
if strtotime(FlatMaskEdit1.Text) <= part then
begin
if strtotime(FlatMaskEdit2.Text) >= part then
ks := i;
break;
end;
end;

for i := 2 to 5 do
begin
if strtotime(FlatMaskEdit2.Text) <= part then
begin
if strtotime(FlatMaskEdit1.Text) <= part[i - 1] then
js := i - 1;
break;
end;
end;

memo1.Lines.Clear;
if (ks <> 0) and (js <> 0) then
for i := ks to js do
memo1.Lines.Add('00:' + timetostr(part));
end;
 
接受答案了.
 
后退
顶部