计算2个datetime之间的差值

nbhtm2007 2011-07-29 08:08:14
计算2个datetime之间的差值 并做出判断 当结果小于等于5秒 则跳出或不写入数据库
datetime=ldt_dxsj,ldt_lxsj

是不是先要把datetime转为 int怎么转? 本人新手求教
...全文
579 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyoinge 2011-08-02
  • 打赏
  • 举报
回复
从2011年7月23日开始,到了每天凌晨,7月22日以后发的帖子和回复的帖子都会被CSDN恶意的沉掉。每天早上上论坛,帖子列表中能看到的帖子的最后更新日期最晚是7月22日。这无疑让很多提问者的帖子无法被大家浏览,进而无法及时给予解答。

希望 版主:lzp_lrp 能够帮忙反映问题!!!

从“我的社区 → 我回复的帖子”中,可以正常的看到自己回复过的帖子,所以我决定每天手动将我回复过得帖子重新顶起来,希望大家理解并支持我的做法。

希望看到的人,可以帮忙顶一下,毕竟我只能连续砌三楼

最近回复过的帖子,被CSDN给沉了,重新顶起
yyoinge 2011-08-01
  • 打赏
  • 举报
回复
最近回复过得帖子,被CSDN给沉了,重新顶起
nbhtm2007 2011-07-30
  • 打赏
  • 举报
回复
event modified;long ll_htbh
integer li_row1, li_htzt, li_row2, li_htlx
datetime ldt_dxsj, ldt_lxsj, ldt_sksj
dec{2} ldc_xxsj



ll_htbh = long(sle_htbh.text)
dw_1.settransobject(sqlca)
gs_string = dw_1.getsqlselect()
gs_select = mid(gs_string,1,pos(upper(gs_string),'WHERE') - 1)
gs_where = " WHERE ( zy_cw_htxx.khid = zy_khxx.khid ) and ( zy_cw_htxx.htbh = " + string(ll_htbh) + " )"
gs_sql = gs_select+gs_where
dw_1.setsqlselect(gs_sql)
li_row1 = dw_1.retrieve()
if li_row1 = 0 or IsNull(li_row1) then
MessageBox('提示信息','您输入的合同编号不存在!',Exclamation!)
dw_1.reset()
dw_1.insertrow(0)
dw_2.reset()
dw_2.insertrow(0)
cb_dj.enabled = false
return
end if
li_htzt = dw_1.object.htzt[li_row1]
li_htlx = dw_1.object.htlx[li_row1]
ldt_sksj = gf_server_date()
if li_htzt = 2 then
MessageBox('提示信息','您的合同已经冻结!',Exclamation!)
dw_1.reset()
dw_1.insertrow(0)
dw_2.reset()
dw_2.insertrow(0)
cb_dj.enabled = false
return
elseif li_htzt > 2 then
MessageBox('提示信息','您的合同已经结束或中止!',Exclamation!)
dw_1.reset()
dw_1.insertrow(0)
dw_2.reset()
dw_2.insertrow(0)
cb_dj.enabled = false
return
elseif li_htlx = 2 and ldt_sksj > datetime(date(gf_server_date()),time('17:30:00')) then
MessageBox('提示信息','该学员是白天班的学员,请提醒学员按时离校!',Exclamation!)
dw_1.reset()
dw_1.insertrow(0)
dw_2.reset()
dw_2.insertrow(0)
cb_dj.enabled = false
return
else
cb_dj.enabled = true
ldt_dxsj = datetime(date(gf_server_date()),time('00:00:00'))
dw_2.settransobject(sqlca)
gs_string = dw_2.getsqlselect()
gs_select = mid(gs_string,1,pos(upper(gs_string),'WHERE') - 1)
gs_where = " WHERE ( zy_jw_xxjl.htbh = " + string(ll_htbh) + " ) and ( zy_jw_xxjl.dxsj >= '" + string(ldt_dxsj) + "' ) and ( zy_jw_xxjl.lxsj is null )"
gs_sql = gs_select+gs_where
dw_2.setsqlselect(gs_sql)
li_row2 = dw_2.retrieve()
if li_row2 = 0 or IsNull(li_row2) then
li_row2 = dw_2.insertrow(0)
dw_2.object.jlid[li_row2] = gf_get_max(sqlca,'zy_jw_xxjl',1)
dw_2.object.htbh[li_row2] = ll_htbh
dw_2.object.khid[li_row2] = dw_1.object.khid[li_row1]
dw_2.object.dxsj[li_row2] = ldt_sksj
dw_2.object.dxdjgh[li_row2] = base_info.yhdm
else
ldt_dxsj = dw_2.object.dxsj[li_row2]
ldt_lxsj = ldt_sksj
dw_2.object.lxsj[li_row2] = ldt_lxsj
dw_2.object.lxdjgh[li_row2] = base_info.yhdm
ldc_xxsj = round(secondsafter(time(ldt_dxsj),time(ldt_lxsj))/3600,2)
dw_2.object.xxsj[li_row2] = ldc_xxsj
end if
end if
end event
上面是代码
ldt_dxsj是第一次刷卡

ldt_lxsj是第二次刷卡

ldc_xxsj是2数之差

我需要ldc_xxsj <=5秒 时不写入数据库 或者跳出

我用secondsafter(time(ldt_lxsj),time(ldt_dxsj)) 试过
但是最后无法写入ldt_lxsj了 一直变成重复刷卡了
yyoinge 2011-07-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 nbhtm2007 的回复:]

我求的就是 当天的 基本不会超过10秒 越简洁越好 但是
secondsafter(time(ldt_lxsj),time(ldt_dxsj)) 就是编译通不过
[/Quote]

编译不通过提示什么
yyoinge 2011-07-29
  • 打赏
  • 举报
回复
f_secondsafter(datetime adt_s, datetime adt_e)

if adt_s > adt_e then // 开始时间大于结束时间
return (daysafter(date(adt_e), date(adt_s)) * 86400 + secondsafter(time(adt_e), time(adt_s))) * -1
else
return daysafter(date(adt_s), date(adt_e)) * 86400 + secondsafter(time(adt_s), time(adt_e))
end if
nbhtm2007 2011-07-29
  • 打赏
  • 举报
回复
我求的就是 当天的 基本不会超过10秒 越简洁越好 但是
secondsafter(time(ldt_lxsj),time(ldt_dxsj)) 就是编译通不过
yyoinge 2011-07-29
  • 打赏
  • 举报
回复
但是secondsafter是不考虑日期的
也就是说
secondsafter(time(2011-07-29 23:59:59),time(2011-07-30 00:00:01))
得出的秒数差不是2秒,而是 -86398秒
yyoinge 2011-07-29
  • 打赏
  • 举报
回复
secondsafter(time(ldt_dxsj),time(ldt_lxsj))得出的是秒数差,不用再 / 3600 了
nbhtm2007 2011-07-29
  • 打赏
  • 举报
回复
date我要的是秒 ldc_xxsj = round(secondsafter(time(ldt_dxsj),time(ldt_lxsj))/3600,2) 这样?

做个考勤 就是在避免重复刷卡做的判断 当第二次刷卡时间小于5秒 则不写入数据库

ldt_dxsj是第一次刷卡

ldt_lxsj是第二次刷卡

yyoinge 2011-07-29
  • 打赏
  • 举报
回复
说明,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就是最终的秒数的差
wag_enu 2011-07-29
  • 打赏
  • 举报
回复
有一个 secondsafter() 方法可以取两个时间的间隔,但是datetime 的话,要注意date 部份的判断。
本课程采用了漫画+动手实操+练习讲授Python编程技能。课程简介:第11章 常用内置模块11.1 数学计算模块 —— math模块11.2 日期时间模块 —— datetime模块11.2.1 datetime类11.2.2 date类11.2.3 time类11.2.4 计算时间跨度类——timedelta11.2.5 将日期时间对象与字符串相互转换11.3 正则表达式模块 —— re模块11.3.1 字符串匹配11.3.2 字符串查找11.3.3 字符串替换11.3.4 字符串分割11.5 练一练第12章 文件读写12.1 打开文件12.2 关闭文件12.2.1 在finally代码块中关闭文件12.2.2 在with as代码块中关闭文件12.3 读写文本文件12.4 动动手 —— 复制文本文件12.5 读写二进制文件12.6 动动手 —— 复制二进制文件12.1 练一练第13章 图形用户界面13.1 Python中的图形用户界面开发库13.2 安装wxPython17813.3 第一个wxPython程序18013.4 自定义窗口类18213.5 在窗口中添加控件18213.6 事件处理18413.7 布局管理18513.7.1 盒子布局管理器18613.7.2 动动手——重构事件处理示例13.7.3 动动手——盒子布局管理器嵌套示例13.8 控件13.8.1 文本输入控件13.8.2 复选框和单选按钮13.8.3 列表13.8.4 静态图片控件13.9 点拨点拨 —— 如何使用wxPython官方文档13.10 练一练第14章 网络通信14.1 基本的网络知识14.1.1 TCP/IP14.1.2 IP地址14.1.3 端口14.1.4 HTTP/HTTPS14.2 搭建自己的Web服务器14.3 urllib.request模块14.3.1 发送GET请求14.3.2 发送POST请求14.4 JSON数据14.4.1 JSON文档的结构14.4.2 对JSON数据的解码14.5 动动手 —— 下载图片示例14.6 动动手 —— 返回所有备忘录信息14.7 练一练第15章 访问数据库15.1 SQLite15.1.1 SQLite的数据类型15.1.2 Python的数据类型与SQLite的数据类型的映射15.1.3 使用GUI管理工具管理SQLite15.2 数据库编程的基本操作过程15.3.1 数据库连接对象Connection15.3.2 游标对象Cursor15.4 动动手 —— 数据库的CRUD操作示例15.4.1 示例中的数据表15.4.2 无条件查询15.4.3 有条件查询15.4.4 插入数据15.4.5 更新数据15.4.6 删除数据15.5 点拨点拨 —— 防止SQL注入攻击15.6 练一练第16章 多线程16.1 线程相关的知识16.1.1 进程16.1.2 线程16.1.3 主线程16.2 线程模块 —— threading模块16.3 创建子线程16.3.1 自定义函数实现线程体16.3.2 自定义线程类实现线程体16.4 线程管理16.4.1 等待线程结束16.4.2 线程停止16.5 动动手 —— 下载图片示例16.6 练一练

1,075

社区成员

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

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