如何计算两个datetime的时间间隔(精确到秒)?

rsy123 2007-12-20 10:43:01
我用的是PowerBuilder 10.0,要求计算出两个datetime的时间间隔(精确到秒),如
2007-12-20 17:00:00和2007-12-21 20:05:30的计算结果为27:05:30(小时:分钟:秒),其中小时可以超出两位,最多不会超过150小时.

我曾经用secondafter做过,但是超出一天就不行了。请问如何才能够算出两者的时间间隔,谢谢。

...全文
862 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2007-12-21
  • 打赏
  • 举报
回复
作品:统计两个时间段之间的秒数!如果结束段小于开始段则为负数!
制作:独孤求败!
版本:PB802!
日期:2004-05-07!
注意:版权所有,欢迎盗版!


本文将开始和结束结束时间放在窗口的OPEN事件中,网友可以从其他途径获得。

sle_data1.Text = "2004-05-07"
sle_time1.Text = "20:15:00"
sle_data2.Text = "2004-05-07"
sle_time2.Text = "20:15:30"

统计按钮的代码如下:

long ll_total_seconds = 0 , ll_day_adjust = 0
date ld_sdate, ld_edate //日期
time lt_stime, lt_etime //时间

ld_sdate = date(sle_data1.Text)
ld_edate = date(sle_data2.Text)

lt_stime = time(sle_time1.Text)
lt_etime = time(sle_time2.Text)

//86400为一天的总秒数,如果要算小时,将所得结果除以60
IF ld_edate = ld_sdate THEN //如果日期相同
ll_total_seconds = secondsafter(lt_stime , lt_etime)
ELSE
IF ld_edate > ld_sdate THEN
ll_day_adjust = DaysAfter(ld_sdate , ld_edate) - 1
ll_total_seconds = SecondsAfter(Time('00:00:00') , lt_etime) + 86400*ll_day_adjust + SecondsAfter(lt_stime , Time('23:59:59')) + 1 //1为修正值
ELSE //将两个时间段交换
ll_day_adjust = DaysAfter(ld_edate , ld_sdate) - 1
ll_total_seconds = SecondsAfter(Time('00:00:00') , lt_stime) + 86400*ll_day_adjust + SecondsAfter(lt_etime , Time('23:59:59')) + 1 //1为修正值
ll_total_seconds = - ll_total_seconds //将计算所得的值置反
END IF
END IF

sle_1.Text = STRING(ll_total_seconds)
霖湘凝 2007-12-21
  • 打赏
  • 举报
回复
说明,adtm_start和adtm_end分别是你要比较的日期
long ll_total_seconds, ll_day_adjust
date ld_sdate, ld_edate
time lt_stime, lt_etime

ld_sdate = date(adtm_start)
ld_edate = date(adtm_end)

lt_stime = time(adtm_start)
lt_etime = time(adtm_end)

//86400为一天的总秒数
If ld_sdate = ld_edate then
ll_total_seconds = secondsafter( lt_stime,lt_etime)
Elseif ld_sdate < ld_edate Then
ll_total_seconds = SecondsAfter(lt_stime,Time('23:59:59'))
ll_day_adjust = DaysAfter(ld_sdate,ld_edate) -1
If ll_day_adjust > 0 Then ll_total_seconds = ll_total_seconds + 86400 * ll_day_adjust
ll_total_seconds = ll_total_seconds + SecondsAfter(Time('00:00:00'),lt_etime) +1
Else //end date < start date
ll_total_seconds = SecondsAfter(lt_stime,Time('00:00:00'))
ll_day_adjust = DaysAfter(ld_sdate,ld_edate) +1
If ll_day_adjust < 0 Then ll_total_seconds = ll_total_seconds + 86400 * ll_day_adjust
ll_total_seconds = ll_total_seconds + SecondsAfter(Time('23:59:59'),lt_etime) -1
end If

ll_total_seconds就是最终的秒数的差,然后除以3600就是小时了。

1,079

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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