求助, 能不能导入表中,算出时长?谢谢

yyqqll 2005-11-08 02:32:48

求助, 能不能导入表中,算出时长?

1日 00:12:48指的是 2005-10-1日 00:12:48
31日 23:07:04指的是2005-10-31日 23:07:04

例如:1日00:12:48 -3 1日23:07:04= 01:05:44(1小时5分44秒)

时长 = 结束时间- 开始时间


时间范围 开始时间 结束时间

2005-11-01 00:00 至 2005-11-07 23:59 31日 23:07:04 1日 00:12:48
2005-11-01 00:00 至 2005-11-07 23:59 31日 23:07:04 1日 00:12:48
2005-11-01 00:00 至 2005-11-07 23:59 31日 23:19:57 1日 00:13:33

2005-11-01 00:00 至 2005-11-07 23:59 1日 00:03:46 1日 00:18:25
2005-11-01 00:00 至 2005-11-07 23:59 1日 00:04:16 1日 01:16:48

2005-11-01 00:00 至 2005-11-07 23:59 7日 23:50:41 7日 23:56:52
2005-11-01 00:00 至 2005-11-07 23:59 7日 23:50:41 7日 23:56:52

...全文
92 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyqqll 2005-11-09
  • 打赏
  • 举报
回复
apple_8180(十豆三) , zsjiaming(路口就在不远处) 谢谢,已测试ok

我觉得apple_8180(十豆三)下面这条:
cRESULT=IIF(nHour>9,ALLTRIM(STR(nHour)),'0'+ALLTRIM(STR(nHour)))+':'+IIF(nMinute>9,ALLTRIM(STR(nMinute)),'0'+ALLTRIM(STR(nMinute)))+':'+IIF(nSeconds>9,ALLTRIM(STR(nSeconds)),'0'+ALLTRIM(STR(nSeconds)))

很经典.学了一招,谢谢.

zsjiaming 2005-11-09
  • 打赏
  • 举报
回复

LOCAL latxt(3)
latxt(1)="2005-11-01 00:00 至 2005-11-07 23:59 31日 23:19:571日 00:13:33"
latxt(2)="2005-11-01 00:00 至 2005-11-07 23:59 1日 00:03:461日 00:18:25"
latxt(3)="2005-11-01 00:00 至 2005-11-07 23:59 6日 23:50:417日 23:56:52"
clea
FOR i=1 TO 3
lcdt=sub_dt(latxt(i))
? lcdt
endfor

return


FUNCTION sub_dt()
LPARAMETERS lctxt
Local dd(4,6) &&放4个日期时间型的每个值(1:范围a 2:范围b 3.开始 4结束)
Local atxt(1),atemp(1),lctemp
&&==="2005-11-01 00:00 至 2005-11-07 23:59 31日 23:19:571日 00:13:33"
&&-----1----------2----3----4----------5-----6-----7------------8----
lctxt=Strtran(Alltrim(lctxt),Space(2),Space(1))
lctxt=Strtran(Alltrim(lctxt),Space(2),Space(1)) &&把1-4个空格换成1个空格
lctxt=Strtran(Alltrim(lctxt),Space(1),Chr(13)) &&把空格换在换行符
kk=Alines(atxt,lctxt,.T.)
If kk<>8
Messagebox("错误:字串不完整........")
Return
Endif
atxt(1)=Strtran(atxt(1),'-',Chr(13))
=Alines(atemp,atxt(1),.T.) &&2005-11-01
dd(1,1)=Val(atemp(1)) &&2005
dd(1,2)=Val(atemp(2)) &&11
dd(1,3)=Val(atemp(3)) &&01
dd(1,4)=Val(Left(atxt(2),2)) &&00
dd(1,5)=Val(Right(atxt(2),2)) &&00
dd(1,6)=0
atxt(4)=Strtran(atxt(4),'-',Chr(13))
=Alines(atemp,atxt(4),.T.) &&2005-11-07
dd(2,1)=Val(atemp(1)) &&2005
dd(2,2)=Val(atemp(2)) &&11
dd(2,3)=Val(atemp(3)) &&07
dd(2,4)=Val(Left(atxt(5),2)) &&23
dd(2,5)=Val(Right(atxt(5),2)) &&59
dd(3,3)=Val(atxt(6)) &&31日
lctemp=Left(atxt(7),8) &&23:19:57
lctemp=Strtran(lctemp,':',Chr(13))
=Alines(atemp,lctemp,.T.)
dd(3,4)=Val(atemp(1)) &&23
dd(3,5)=Val(atemp(2)) &&19
dd(3,6)=Val(atemp(3)) &&57
lctemp=Substr(atxt(7),9) &&1日
dd(4,3)=Val(lctemp)
atxt(8)=STRTRAN(atxt(8),':',CHR(13))
=Alines(atemp,atxt(8))
dd(4,4)=Val(atemp(1)) &&00
dd(4,5)=Val(atemp(2)) &&13
dd(4,6)=Val(atemp(3)) &&33
end_dd=Date(dd(2,1),dd(2,2),dd(2,3))
If dd(3,3)>dd(2,3) &&大于结束日
lddate=Gomonth(end_dd,-1)
Else
lddate=end_dd
Endif
dd(3,1)=Year(lddate) &&开始年
dd(3,2)=Month(lddate) &&....月
dd(4,1)=dd(2,1) &&结束年
dd(4,2)=dd(2,2) &&...月
*---计算---
beg_dt=Datetime(dd(3,1),dd(3,2),dd(3,3),dd(3,4),dd(3,5),dd(3,6))
end_dt=Datetime(dd(4,1),dd(4,2),dd(4,3),dd(4,4),dd(4,5),dd(4,6))


xx_dt=end_dt-beg_dt &&差
nday =Int(xx_dt/86400) &&得出天 60*60*24
nhour =Int(xx_dt%86400 /3600) &&得出小时
nminute =Int(xx_dt%86400%3600/60) &&得出分钟
nseconds=Int(xx_dt%86400%3600%60) &&得出秒
lcresult='日时差='+ALLTRIM(STR(nday,2))+'日'+PADL(nhour,2,'0')+'小时'+;
PADL(nminute,2,'0')+'分钟'+PADL(nseconds,2,'0')+'秒'
RETURN lcresult &&自己修改输出格式.




十豆三 2005-11-09
  • 打赏
  • 举报
回复
设表名为YYQQLL,字段为:

时间范围 字符型 长度40
开始时间 字符型 长度15
结束时间 字符型 长度15
时长 字符型 长度15

内容为:
时间范围 开始时间 结束时间 时长
2005-11-01 00:00 至 2005-11-07 23:59 31日 23:19:57 1日 00:13:33
2005-11-01 00:00 至 2005-11-07 23:59 1日 00:03:46 1日 00:18:25
2005-11-01 00:00 至 2005-11-07 23:59 6日 23:50:41 7日 23:56:52

得出时长并写入表中代码如下:

USE YYQQLL
SCAN
tDateTime_E=DATETIME(VAL(SUBSTR(时间范围,AT('至',时间范围)+3,4)),VAL(SUBSTR(时间范围,AT('至',时间范围)+8,2)),VAL(SUBSTR(结束时间,1,AT('日',结束时间)-1)),VAL(SUBSTR(结束时间,AT('日',结束时间)+3,2)),VAL(SUBSTR(结束时间,AT('日',结束时间)+6,2)),VAL(SUBSTR(结束时间,AT('日',结束时间)+9,2))) &&结束时间
dDate_S=IIF(DAY(tDateTime_E)<VAL(SUBSTR(开始时间,1,AT('日',开始时间)-1)),GOMONTH(TTOD(tDateTime_E),-1),TTOD(tDateTime_E))
tDateTime_S=DATETIME(YEAR(dDate_S),MONTH(dDate_S),VAL(SUBSTR(开始时间,1,AT('日',开始时间)-1)),VAL(SUBSTR(开始时间,AT('日',开始时间)+3,2)),VAL(SUBSTR(开始时间,AT('日',开始时间)+6,2)),VAL(SUBSTR(开始时间,AT('日',开始时间)+9,2))) &&开始时间
nDay=INT((tDateTime_E-tDateTime_S)/86400) &&得出天
nHour=INT(MOD((tDateTime_E-tDateTime_S),86400)/3600) &&得出小时
nMinute=INT(MOD(MOD((tDateTime_E-tDateTime_S),86400),3600)/60) &&得出分钟
nSeconds=MOD(MOD(MOD((tDateTime_E-tDateTime_S),86400),3600),60) &&得出秒
cRESULT=IIF(nHour>9,ALLTRIM(STR(nHour)),'0'+ALLTRIM(STR(nHour)))+':'+IIF(nMinute>9,ALLTRIM(STR(nMinute)),'0'+ALLTRIM(STR(nMinute)))+':'+IIF(nSeconds>9,ALLTRIM(STR(nSeconds)),'0'+ALLTRIM(STR(nSeconds)))
REPLACE 时长 WITH ALLTRIM(STR(nDay))+'天'+cRESULT
ENDSCAN
yyqqll 2005-11-08
  • 打赏
  • 举报
回复
apple_8180,你好,谢谢你.
如果一个表中有大量的以下数据,怎么做?

结束时间的年月可以从时间范围确认,如果开始时间的日大于结束时间的日,那开始时间的月就是上个月,例如: 31日>1日,那开始时间的月就是10月,如果开始时间的日小于或等于结束时间的日,那开始时间和结束时间的月就是同一个月,另外开始时间和结束时间在表中都是字符型的,怎么转成日期时间型.不知有没有表达清楚,老师,再教一下新手.

2005-11-01 00:00 至 2005-11-07 23:59 31日 23:19:57 1日 00:13:33
2005-11-01 00:00 至 2005-11-07 23:59 1日 00:03:46 1日 00:18:25
2005-11-01 00:00 至 2005-11-07 23:59 6日 23:50:41 7日 23:56:52
十豆三 2005-11-08
  • 打赏
  • 举报
回复
tDateTime_S={^2005/10/31 23:07:04} &&开始时间
tDateTime_E={^2005/11/01 00:12:48} &&结束时间

nDay=INT((tDateTime_E-tDateTime_S)/86400) &&得出天
nHour=INT(MOD((tDateTime_E-tDateTime_S),86400)/3600) &&得出小时
nMinute=INT(MOD(MOD((tDateTime_E-tDateTime_S),86400),3600)/60) &&得出分钟
nSeconds=MOD(MOD(MOD((tDateTime_E-tDateTime_S),86400),3600),60) &&得出秒

cRESULT=IIF(nHour>9,ALLTRIM(STR(nHour)),'0'+ALLTRIM(STR(nHour)))+':'+IIF(nMinute>9,ALLTRIM(STR(nMinute)),'0'+ALLTRIM(STR(nMinute)))+':'+IIF(nSeconds>9,ALLTRIM(STR(nSeconds)),'0'+ALLTRIM(STR(nSeconds)))
?nDay,'天'
?cRESULT
yyqqll 2005-11-08
  • 打赏
  • 举报
回复
写错时间.
1日 00:12:48指的 不是 2005-10-1日 00:12:48

1日 00:12:48指的 是 2005-11-1日 00:12:48

2,727

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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