| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3006 人关注过本帖
标题:请教下各位大大:有没有体育项目秒表时间的加减算法?
取消只看楼主 加入收藏
shonken
Rank: 2
等 级:论坛游民
帖 子:116
专家分:26
注 册:2017-1-15
收藏
得分:0 
mywisdom88版主理解正确,体育项目一般都是以增加时间为主,一些长时间的项目会跨天,如我上面说的100KM越野,清早5点出发,好多人完赛都要隔天的中午了,跨度十几小时至三十小时不等。也有些体育项目会轻微的减少时间作为奖励,一般是减少分、秒、毫秒。

以下是引用mywisdom88在2022-7-9 01:25:06的发言:

楼主的问题,处理后的结果,可以大于24小时,但不能小于0

2022-07-09 10:06
shonken
Rank: 2
等 级:论坛游民
帖 子:116
专家分:26
注 册:2017-1-15
收藏
得分:0 
谢谢你的思路

以下是引用a57598587在2022-7-8 21:50:01的发言:

抛砖引玉请大侠指导:
cc10 = ThisForm.Text1.Value && 时:分:秒.微秒 格式
cc10 ="01:01:01.123"

*?OCCURS(":",cc10)
cc11 = REPLICATE ("0:",2-OCCURS(":",cc10))-cc10

?cc11
*ALINES(sj1, cc11, 5, ":", ".")
ALINES(sj1, cc11, 5, ".")
?sj1[1]
?sj1[2]
sj101 = CTOT(sj1[1])-CTOT("0:0:0")
sj102 = INT(val(sj1[2]))

?"秒",sj101,"微秒", sj102

?"================"

cc20 = ThisForm.Text2.Value && 时:分:秒.微秒 格式

cc20 =  "01.223"
*?OCCURS(":",cc10)
cc21 = REPLICATE ("0:",2-OCCURS(":",cc20))-cc20

?cc21
*ALINES(sj1, cc11, 5, ":", ".")
ALINES(sj2, cc21, 5, ".")
?sj2[1]
?sj2[2]
sj201 = CTOT(sj2[1])-CTOT("0:0:0")
sj202 = INT(val(sj2[2]))

?"秒",sj201,"微秒", sj202

?"================增加"&&同理可做减少代码
IF sj102+sj202>=1000
    sj31 =sj101 +sj201+1
    sj32 = sj202+sj102 -1000

ELSE
    sj31 =sj101 +sj201
    sj32 = sj202+sj102
ENDIF
?"成绩:",sj31,"秒",sj32,"微秒"

sj41=CTOT("0:0:0")+sj31
?HOUR(sj41)
?MINUTE(sj41)
?SEC(sj41)
?sj32

?"成绩显示:",STR(HOUR(sj41),2,0)+":"+STR(MINUTE(sj41),2,0)+":"+STR(SEC(sj41),2,0)+"."+STR(sj32,3,0)

2022-07-09 10:14
shonken
Rank: 2
等 级:论坛游民
帖 子:116
专家分:26
注 册:2017-1-15
收藏
得分:0 
交功课,主要借鉴csyx的代码为主,加上些实际应用,没用类的方式

程序代码:
Clear
? x_秒表加减('0:10:10.123', '1.123')
? x_秒表加减('0:10:10.123', '+1.123')
? x_秒表加减('10:10.123', 1.123)
? x_秒表加减('1:10:10.123', -1.124)
? x_秒表加减('1:10:10.123', '-11:1.124')
? x_秒表加减('2022-07-09T23:59:08.999', '+11:1.124')
? x_秒表加减('2000-01-01T00:10:11.123','1.123')
? x_秒表加减(x_秒表加减(x_秒表加减('0', 1.123), '+11:1.124'), '-1.124')
Function x_秒表加减
    Lparameters lcValue1,lcValue2
    lcValue2 = Iif(Vartype(lcValue2) == 'N', Transform(lcValue2), Alltrim(lcValue2))
    Local ArTime1,ArTime2,LnSs, LnTt, LnMs, LnY, LnM, LnD
    Dimension ArTime1[4],ArTime2[4]
    ArTime1=x_formatTime(lcValue1)&&格式化输入数据,并装入数组
    ArTime2=x_formatTime(lcValue2)
    If Vartype(ArTime1)="L" Or Vartype(ArTime2)="L"
        Return .F.
    Endif
    LnY = Year(Date())
    LnM = Month(Date())
    LnD = Day(Date())
    LnSs = ArTime2[1] * 3600 + ArTime2[2] * 60 + ArTime2[3]
    If Left(lcValue2, 1) == '-'
        LnTt = Datetime(LnY,LnM,LnD, ArTime1[1], ArTime1[2], ArTime1[3]) - LnSs
        LnMs = ArTime1[4] - ArTime2[4]
        If LnMs < 0
            LnTt = LnTt - 1
            LnMs = LnMs + 1000
        Endif
    Else
        LnTt = Datetime(LnY,LnM,LnD, ArTime1[1], ArTime1[2], ArTime1[3]) + LnSs
        LnMs = ArTime1[4] + ArTime2[4]
        If LnMs > 999
            LnTt = LnTt + 1
            LnMs = LnMs - 1000
        Endif
    Endif
    Return Ttoc(LnTt, 3) + '.' + Padl(LnMs, 3, '0')
Endfunc

Function x_formatTime
    Lparameters tcTime
    If Occurs("T",tcTime)>0
        If Ctod(Getwordnum(tcTime, 1, 'T'))<Date()
            Messagebox("日期数据不能小于当时日期",16+0,"停止")
            Return .F.
        Else
            tcTime = Getwordnum(tcTime, 2, 'T')
        Endif
    Endif
    If Occurs(".",tcTime)>1 Or Occurs(":",tcTime)>2 Or Occurs("-",tcTime)>1 Or Occurs("+",tcTime)>1 Or Occurs("+-",tcTime)>0 Or Occurs("-+",tcTime)>0
        Messagebox("输入数据格式错误",16+0,"停止")
        Return .F.
    Endif
    lcTm = Ltrim(Alltrim(Getwordnum(tcTime, 1, '.')), '-')
    lcTm = Ltrim(lcTm, '+')
    lcTm = Replicate ("0:",2-Occurs(":",lcTm))+lcTm
    lcMs = Getwordnum(tcTime, 2, '.')
    Publ ArTime
    Dimension ArTime[4]
    ArTime[1] = Cast(Getwordnum(LcTm, 1, ':') As I)
    ArTime[2] = Cast(Getwordnum(LcTm, 2, ':') As I)
    ArTime[3] = Cast(Getwordnum(LcTm, 3, ':') As I)
    ArTime[4] = Cast(LcMs As I)
    Return @ArTime
Endfunc


[此贴子已经被作者于2022-7-9 15:06编辑过]

2022-07-09 12:27
shonken
Rank: 2
等 级:论坛游民
帖 子:116
专家分:26
注 册:2017-1-15
收藏
得分:0 
谢谢校对
    LnSs = ArTime2[1] * 3600 + ArTime2[2] * 60 + ArTime2[3]
这句60,写成600

以下是引用吹水佬在2022-7-9 14:33:27的发言:

校对了一下好象有点问题
试试:
? x_秒表加减('2022-07-09T23:59:08.999', '+11:1.124')  && 输出 2022-07-10T01:49:10.123
或简化点:
? x_秒表加减('2022-07-09T23:59:00', '+1:00')  && 输出 2022-07-10T00:09:00.000

2022-07-09 15:06
快速回复:请教下各位大大:有没有体育项目秒表时间的加减算法?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015155 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved