Tibco Spotfire中Real型秒/毫秒数值转换为当日时间咨询
十进制秒转TimeSpan保留毫秒的正确实现
问题根源
原写法失效的核心原因是:TimeSpan(天, 时, 分, 秒, 毫秒)构造函数的第五个参数要求为整数类型的毫秒值,直接传入秒的小数部分(如0.321秒对应0.321)时,会被自动取整为0,自然丢失毫秒精度。
正确实现方案
通用兼容写法
把秒的小数部分乘以1000后转为整数作为毫秒参数传入即可:
TimeSpan( 0, 0, 0, Integer(Floor([Time])), Integer(Round(([Time] - Floor([Time])) * 1000, 0)) )
高精度简化写法
如果开发环境支持Tick刻度构造(TimeSpan最小刻度Tick为100纳秒,1秒=10^7 Tick),可以直接用更简洁的表达式,最高可保留100纳秒级精度:
TimeSpan([Time] * 10000000)
完整拼接最终时间的参考逻辑
如需直接得到叠加起始时间后的最终当日时间,写法参考(不同开发语言逻辑一致):
DateTime(2021,5,26,11,58,0) + TimeSpan([Time] * 10000000)
注意事项
- 部分低版本开发工具对
TimeSpan的浮点运算支持有缺陷,如果遇到报错可以拆分步骤计算:先算总秒数的整数部分,再单独计算毫秒值后拼装 - 如果源数据秒的小数部分超过3位(即包含微秒/纳秒),优先使用Tick构造方案避免精度损失
内容的提问来源于stack exchange,提问作者MegaLoMonkey
相关产品推荐
相关产品推荐

