-
-
esen_4QBPI1VXAV 初学数据Lv2
发表于2026-6-8 14:46
悬赏20
已解决
我们用变量@date表示字符串'yyyymmdd',用@time表示字符串'HH:MM:SS'
随后进行字符串处理,取字符串'HH',left(@time,2)
取数字HH,asnum(left(@time,2))
然后进行减去12小时的操作,这里有两种情况:1是其自身大于等于12,减去12小时不改变日期,一种是其自身小于12,那么需要改变日期并进行退位,举例,如果小时为13,那么减去12变为1,如果小时为5,那么应该变为17,可以看到逻辑是如果小时大于等于12就减去12,如果小时小于12那么就加12,在这里我们可以用取模操作,即 统一为 (HH+12) % 24
还有一个小问题,即小时字符串'13‘变为数字13,然后减去12后变为数字1,需要再变为字符串'01',即小时的数字被转化为字符串时如果位数是一位则需要填充一个字符'0'
完整逻辑如下:
顺序定义变量
@HH_num=asnum(left(@time,2))
@HH_num_sub_12=(@HH_num+12) % 24
@HH_str_new=''
if(@HH_num_sub_12 < 10,@HH_str_new='0'+asstr(@HH_num_sub_12),@HH_str_new=asstr(@HH_num_sub_12))
if(@HH_num < 12,@date=ob(@date,'d-1'),true)
@HHMMSS_NEW=@HH_str_new+right(@time,6)
@datetime_new=@date+' '+@HHMMSS_NEW
3个回答
楼主你的格式是 'yyyymmdd HH:MM:SS' 其中@date表示'yyyymmdd',由你的格式可以知道,返回的内容是一个定长拼接字符串,8位date,1位空格,8位时分秒,一共是17位的字符串。
我们用变量@date表示字符串'yyyymmdd',用@time表示字符串'HH:MM:SS'
随后进行字符串处理,取字符串'HH',left(@time,2)
取数字HH,asnum(left(@time,2))
然后进行减去12小时的操作,这里有两种情况:1是其自身大于等于12,减去12小时不改变日期,一种是其自身小于12,那么需要改变日期并进行退位,举例,如果小时为13,那么减去12变为1,如果小时为5,那么应该变为17,可以看到逻辑是如果小时大于等于12就减去12,如果小时小于12那么就加12,在这里我们可以用取模操作,即 统一为 (HH+12) % 24
还有一个小问题,即小时字符串'13‘变为数字13,然后减去12后变为数字1,需要再变为字符串'01',即小时的数字被转化为字符串时如果位数是一位则需要填充一个字符'0'
完整逻辑如下:
顺序定义变量
@HH_num=asnum(left(@time,2))
@HH_num_sub_12=(@HH_num+12) % 24
@HH_str_new=''
if(@HH_num_sub_12 < 10,@HH_str_new='0'+asstr(@HH_num_sub_12),@HH_str_new=asstr(@HH_num_sub_12))
if(@HH_num < 12,@date=ob(@date,'d-1'),true)
@HHMMSS_NEW=@HH_str_new+right(@time,6)
@datetime_new=@date+' '+@HHMMSS_NEW
-
esen_4QBPI1VXAV 初学数据Lv2
陈俊浩 发表于 2026-6-9 09:35
你直接将参数传递下去,然后减去就行了啊
开始日期控件名称是@date,我想传到下一个界面执行@date=@date-12h,公式怎么写呢?怎么直接减呢
地板 

