本帖最后由 书香 于 2025-3-21 05:26 编辑
大家使用精易模块的时候,可能发现了一个问题,那就是当时间间隔过大的时候会出现问题,比如时间_取时间间隔()
查看源代码
|
时间_取时间间隔 | 文本型 | | |
时间1 | 日期时间型 | | | | 时间2 | 日期时间型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 剩余秒数A | 整数型 | | | 剩余秒数B | 整数型 | | | 剩余天 | 整数型 | | | 剩余小时 | 整数型 | | | 剩余分钟 | 整数型 | | | 剩余秒 | 整数型 | | | 返回时间 | 文本型 | | |
剩余秒数A = 取时间间隔 (时间1, 时间2, 8 ) 如果真 (剩余秒数A < 0 ) 剩余秒数A = 剩余秒数A × -1 剩余秒数B = 剩余秒数A % 86400剩余天 = (剩余秒数A - 剩余秒数B ) ÷ 86400 剩余秒数A = 剩余秒数B 剩余秒数B = 剩余秒数A % 3600 剩余小时 = (剩余秒数A - 剩余秒数B ) ÷ 3600 剩余秒数A = 剩余秒数B 剩余秒数B = 剩余秒数A % 60 剩余分钟 = (剩余秒数A - 剩余秒数B ) ÷ 60 剩余秒 = 剩余秒数B 如果真 (剩余天 ≠ 0 ) 返回时间 = 到文本 (剩余天 ) + “天” 如果真 (剩余小时 ≠ 0 ) 返回时间 = 返回时间 + 到文本 (剩余小时 ) + “时” 如果真 (剩余分钟 ≠ 0 ) 返回时间 = 返回时间 + 到文本 (剩余分钟 ) + “分” 如果真 (剩余秒 ≠ 0 ) 返回时间 = 返回时间 + 到文本 (剩余秒 ) + “秒”返回 (返回时间)
这里的参数用了整数型,整数类型占用4个字节,因此最大值为2147483647,也就是说当间隔超过这个值的时候,就会出现运算bug
例子:
时间类函数里面很多地方都是使用的整数类型,这导致了运算是超过了整数类型可以容纳的最大值,通过修改类型后
很明显,依旧不对
通过调试发现是易语言的取时间间隔出现问题
于是我选择使用时间戳来处理这个问题
这下好像没问题了(但是这种写法只能用于1970后的时间计算)
注:时间戳是自格林威治时间 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数,也被称为 Unix 时间戳
北京时间则为:1970 年 1 月 1 日 08:00:00,这里大家注意下 |
时间_取时间间隔 | 文本型 | | |
时间1 | 日期时间型 | | | | 时间2 | 日期时间型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 剩余秒数A | 双精度小数型 | | | 剩余秒数B | 双精度小数型 | | | 剩余天 | 双精度小数型 | | | 剩余小时 | 双精度小数型 | | | 剩余分钟 | 双精度小数型 | | | 剩余秒 | 双精度小数型 | | | 返回时间 | 文本型 | | |
剩余秒数A = 到数值 (时间_到时间戳1 (时间1, #秒 )) - 到数值 (时间_到时间戳1 (时间2, #秒 )) 调试输出 (剩余秒数A ) 如果真 (剩余秒数A < 0 ) 剩余秒数A = 剩余秒数A × -1 剩余秒数B = 剩余秒数A % 86400剩余天 = (剩余秒数A - 剩余秒数B ) ÷ 86400 剩余秒数A = 剩余秒数B 剩余秒数B = 剩余秒数A % 3600 剩余小时 = (剩余秒数A - 剩余秒数B ) ÷ 3600 剩余秒数A = 剩余秒数B 剩余秒数B = 剩余秒数A % 60 剩余分钟 = (剩余秒数A - 剩余秒数B ) ÷ 60 剩余秒 = 剩余秒数B 如果真 (剩余天 ≠ 0 ) 返回时间 = 到文本 (剩余天 ) + “天” 如果真 (剩余小时 ≠ 0 ) 返回时间 = 返回时间 + 到文本 (剩余小时 ) + “时” 如果真 (剩余分钟 ≠ 0 ) 返回时间 = 返回时间 + 到文本 (剩余分钟 ) + “分” 如果真 (剩余秒 ≠ 0 ) 返回时间 = 返回时间 + 到文本 (剩余秒 ) + “秒”返回 (返回时间)
重点:
由于历史原因,1582年10月5日——1582年10月14日是不存在的,如果通过其他技术计算时间需要考虑这一点
希望官方可以早日修复时间类函数的bug
|