开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3679|回复: 8
收起左侧

[已解决] 时间_到时间戳() BUG

[复制链接]
结帖率:87% (34/39)
发表于 2018-8-7 21:49:41 | 显示全部楼层 |阅读模式   四川省南充市
  
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
时间1日期时间型 
时间2日期时间型 
时间3日期时间型 
时间4日期时间型 
时间1 = 到时间 (“2001年1月1日”)
时间2 = 到时间 (“1950年1月1日”)
时间3 = 到时间 (“1920年1月1日”)
时间4 = 到时间 (“1900年1月1日”)
调试输出 (到文本 (时间1)“:不取满十位:”时间_到时间戳 (时间1, 真, )“   取满十位:”时间_到时间戳 (时间1, 真, ))
调试输出 (到文本 (时间2)“:不取满十位:”时间_到时间戳 (时间2, 真, )“   取满十位:”时间_到时间戳 (时间2, 真, ))
调试输出 (到文本 (时间3)“:不取满十位:”时间_到时间戳 (时间3, 真, )“   取满十位:”时间_到时间戳 (时间3, 真, ))
调试输出 (到文本 (时间4)“:不取满十位:”时间_到时间戳 (时间4, 真, )“   取满十位:”时间_到时间戳 (时间4, 真, ))


i支持库列表   支持库注释   
spec特殊功能支持库



输出结果:(使用的精易6.2版本)

* “2001年1月1日:不取满十位:9782784000   取满十位:0978278400”
* “1950年1月1日:不取满十位:-631180799   取满十位:-631180799”
* “1920年1月1日:不取满十位:-157795199   取满十位:-157795199”
* “1900年1月1日:不取满十位:2085949697   取满十位:2085949697”


    子程序名:时间_到时间戳
    把指定日期时间转换为10位或13位时间戳,默认生成13位时间戳。13位:1325252169718,10位:1325252169
    返回值类型:文本型
    参数<1>的名称为“参_时间”,类型为“日期时间型”,允许接收空参数数据。注明:可为空,默认为现行时间。
    参数<2>的名称为“参_十位时间戳”,类型为“逻辑型”,允许接收空参数数据。注明:本参数为真时,将生成10位时间戳返回。
    参数<3>的名称为“参_是否取满10位”,类型为“逻辑型”,允许接收空参数数据。注明:如果参数为真,则保证一定取出至少10位,如果不足10位,在前面补0. 如果为假,则直接取出。


很明显当第三个参数为假或者为空时,自动在后面加0了,不是想要的结果

至于返回负数,本来是用时间戳参考对照生日的,结果越取越乱,既然返回了负数那么就至少该准确吧

至少位数不够的时候返回个9999999999也可以啊,调试了半天才发现是模块的问题,心累

评分

参与人数 1精币 +1 收起 理由
项目部002 + 1 感谢你的支持,精易有你更精彩

查看全部评分

结帖率:71% (10/14)

签到天数: 1 天

发表于 2018-8-11 08:36:29 | 显示全部楼层   陕西省渭南市
6666666666
回复 支持 反对

使用道具 举报

结帖率:67% (2/3)
发表于 2018-8-8 18:27:38 | 显示全部楼层   四川省绵阳市
本帖最后由 C盘是头猪 于 2018-8-8 18:28 编辑

恭喜你,找着了真正的bug.
干的漂亮,小伙子....
  
子程序名返回值类型公开备 注
时间_到时间戳文本型 把指定日期时间转换为10位或13位时间戳,默认生成13位时间戳。13位:1325252169718,10位:1325252169
参数名类 型参考可空数组备 注
参_时间日期时间型可为空,默认为现行时间
参_十位时间戳逻辑型本参数为真时,将生成10位时间戳返回
参_是否取满10位逻辑型如果参数为真,则保证一定取出至少10位,如果不足10位,在前面补0. 如果为假,则直接取出
变量名类 型静态数组备 注
局_时间精易_时间 
返回值文本型 
毫秒数文本型 
时间a文本型 
参_时间 = 选择 (是否为空 (参_时间), 取现行时间 (), 参_时间)
VariantTimeToSystemTime (参_时间, 局_时间)
毫秒数 = 取重复文本 (3 - 取文本长度 (到文本 (局_时间.毫)), “0”)到文本 (局_时间.毫)
时间a = 到文本 (取时间间隔 (参_时间, 到时间 (“1970-01-01 08:00:00”), #秒 ))
如果真 (参_是否取满10位)
如果真 (取文本长度 (时间a) < 10)
时间a = 取重复文本 (10 - 取文本长度 (时间a), “0”) + 时间a
调试输出 (参_时间, 局_时间.年, 局_时间.月, 局_时间.日, 局_时间.时, 局_时间.分, 局_时间.秒, “毫秒数:”, 毫秒数, “时间a:”, 时间a)
调试输出 (参_时间, 局_时间.年, 局_时间.月, 局_时间.日, 局_时间.时, 局_时间.分, 局_时间.秒, “毫秒数:”, 毫秒数, “时间a:”, 时间a, “时间a + 毫秒数:”, 时间a + 毫秒数)
返回 (选择 (参_十位时间戳, 时间a, 时间a + 毫秒数))


i支持库列表   支持库注释   
spec特殊功能支持库


关键在最后一行,第二个参数,在取十位时间戳的时候,不需要再加上毫秒数,总共才10位,再加就爆了.
以下是模块原来的代码,写的很标准,只是问题出在最后一行.

  
子程序名返回值类型公开备 注
时间_到时间戳文本型 把指定日期时间转换为10位或13位时间戳,默认生成13位时间戳。13位:1325252169718,10位:1325252169
参数名类 型参考可空数组备 注
参_时间日期时间型可为空,默认为现行时间
参_十位时间戳逻辑型本参数为真时,将生成10位时间戳返回
参_是否取满10位逻辑型如果参数为真,则保证一定取出至少10位,如果不足10位,在前面补0. 如果为假,则直接取出
变量名类 型静态数组备 注
局_时间精易_时间 
返回值文本型 
毫秒数文本型 
时间a文本型 
参_时间 = 选择 (是否为空 (参_时间), 取现行时间 (), 参_时间)
VariantTimeToSystemTime (参_时间, 局_时间)
毫秒数 = 取重复文本 (3 - 取文本长度 (到文本 (局_时间.毫)), “0”)到文本 (局_时间.毫)
时间a = 到文本 (取时间间隔 (参_时间, 到时间 (“1970-01-01 08:00:00”), #秒 ))
如果真 (参_是否取满10位)
如果真 (取文本长度 (时间a) < 10)
时间a = 取重复文本 (10 - 取文本长度 (时间a), “0”) + 时间a

返回 (选择 (参_十位时间戳, 取文本左边 (时间a + 毫秒数, 10), 时间a + 毫秒数))

复制代码




楼主观察的够仔细,送上12个赞...
那个 9782784000(10位)    代表着北京时间:2280-01-03 0:0:00
另外 978278400(9位)       代表着北京时间:2001-01-01 0:0:00
还有 0978278400(10位)    代表着北京时间:2001-01-01 0:0:00
要把这样的整数放到数组里比较,当然会出错了.


评分

参与人数 1好评 +1 精币 +1 收起 理由
项目部002 + 1 + 1 感谢分享,很给力!~

查看全部评分

回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 7 天

发表于 2018-8-8 11:16:10 | 显示全部楼层   广东省深圳市
endless1 发表于 2018-8-8 08:38
我知道是1970年1月1日开始的,你还是先好好理解我的描述再说吧,没看懂就想教育人,真有趣

你更有趣。你知道是从1970年开始 为什么还要传递1900的年份,难道 你家有百岁老人使用软件?
回复 支持 反对

使用道具 举报

结帖率:87% (34/39)
 楼主| 发表于 2018-8-8 09:51:37 | 显示全部楼层   四川省南充市
C盘是头猪 发表于 2018-8-7 22:37
加油,你一定会找着真正的bug....
  
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
时间1文本型 
时间2文本型 
时间1 = “2001年1月1日”
调试输出 (时间_到时间戳 (到时间 (时间1), 真, ))
时间2 = “2002年1月1日”
调试输出 (时间_到时间戳 (到时间 (时间2), 真, ))


i支持库列表   支持库注释   
spec特殊功能支持库


我主要说的是这个,而不是楼下几个自诩很聪明的描述的附带问题,都懒得跟他们解释

输出:
* “9782784000”
* “1009814400”


这个结果出现在某个数组中判断时间戳时出错,时间1的时间戳比时间2的时间戳大

时间1的时间戳应该返回的是 978278400  而不是 9782784000
回复 支持 反对

使用道具 举报

结帖率:87% (34/39)
 楼主| 发表于 2018-8-8 09:51:13 | 显示全部楼层   四川省南充市
C盘是头猪 发表于 2018-8-7 22:37
加油,你一定会找着真正的bug....
  
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
时间1文本型 
时间2文本型 
时间1 = “2001年1月1日”
调试输出 (时间_到时间戳 (到时间 (时间1), 真, ))
时间2 = “2002年1月1日”
调试输出 (时间_到时间戳 (到时间 (时间2), 真, ))


i支持库列表   支持库注释   
spec特殊功能支持库


我主要说的是这个,而不是楼下几个自诩很聪明的描述的问题,都懒得跟他们解释

输出:
* “9782784000”
* “1009814400”


这个结果出现在某个数组中判断时间戳时出错,时间1的时间戳比时间2的时间戳大

时间1的时间戳应该返回的是 978278400  而不是 9782784000
回复 支持 反对

使用道具 举报

结帖率:87% (34/39)
 楼主| 发表于 2018-8-8 09:50:49 | 显示全部楼层   四川省南充市
C盘是头猪 发表于 2018-8-7 22:37
加油,你一定会找着真正的bug....
  
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
时间1文本型 
时间2文本型 
时间1 = “2001年1月1日”
调试输出 (时间_到时间戳 (到时间 (时间1), 真, ))
时间2 = “2002年1月1日”
调试输出 (时间_到时间戳 (到时间 (时间2), 真, ))


i支持库列表   支持库注释   
spec特殊功能支持库


我主要说的是这个问题,而不是楼下几个自诩很聪明的描述,都懒得跟他们解释

输出:
* “9782784000”
* “1009814400”


这个结果出现在某个数组中判断时间戳时出错,时间1的时间戳比时间2的时间戳大

时间1的时间戳应该返回的是 978278400  而不是 9782784000
回复 支持 反对

使用道具 举报

结帖率:87% (34/39)
 楼主| 发表于 2018-8-8 09:44:07 | 显示全部楼层   四川省南充市
我主要说的问题是:

当被取时间戳时间的第三个参数 是否取满10位为假的时候     非10位的时间戳会自动在末尾加0,也就是扩大了十倍。

至于负数,只是象征性的谈一谈,既然负数本来就不应该出现,那为什么不返回0,既然出现了就至少证明这里面有计算
回复 支持 反对

使用道具 举报

结帖率:87% (34/39)
 楼主| 发表于 2018-8-8 08:38:35 高大上手机用户 | 显示全部楼层   四川省南充市
阿苏大大 发表于 2018-8-7 21:52
不要凡事都想着是BUG ,了解下时间戳的含义;时间戳是指格林威治时间1970年01月01日00时 ...

我知道是1970年1月1日开始的,你还是先好好理解我的描述再说吧,没看懂就想教育人,真有趣
回复 支持 反对

使用道具 举报

结帖率:67% (2/3)
发表于 2018-8-7 22:37:15 | 显示全部楼层   四川省绵阳市
加油,你一定会找着真正的bug....
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表