我用simpledateformat在android中格式化时间。目标是从包含时间(以毫秒为单位)的long中获取人类可读的时间表示:
var simpleDateFormat = SimpleDateFormat("s.SS")
simpleDateFormat.timeZone = TimeZone.getTimeZone("UTC")
var result = simpleDateFormat.format(timeInMillis)
我遇到了以下非常奇怪的错误:timeinmillis的最后一个数字是7或8,前面的数字是5,格式化是错误的,因为1/100秒的结果太小了。
例子:
时间单位:毫秒=1570
结果期望值:1.57
结果实际值1.56
有人能重现这个错误吗?我在哪里可以报告?
2条答案
按热度按时间ctehm74n1#
对此行为的解释是,android SimpleDataFormat在这里使用了不准确的浮点数学:
例如,表达式
(int) (((double) value / 1000) * Math.pow(10, count))
对于值570和计数2,产生56。正如其他回答者所指出的,在android开发中有更好的datetimes替代方案。例如java8.java.time desugaring。
a6b3iqyw2#
我不知道你想怎么做。
输出:
在ideone上也检查一下。
注意,api的日期时间
java.util
以及它们的格式化api,SimpleDateFormat
过时且容易出错。建议完全停止使用它们,并切换到现代日期时间api。在trail:date-time了解有关现代日期时间api的更多信息。注意:如果您正在为一个android项目工作,并且您的android api级别仍然不符合java-8,请检查通过desugaring提供的java8+api以及如何在android项目中使用threetenabp。
使用现代日期时间api:
输出: