Java 转换double为Date format string的结果不一致
大家讲道理
大家讲道理 2017-04-17 13:15:10
[Java讨论组]

使用的代码如下:

double itemDouble = 1370437809.00;
long itemLong = (long) (itemDouble * 1000);
Date itemDate = new Date(itemLong);
String itemDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS").format(itemDate);

当itemDouble的值小数位是00的时候结果是正常的,比如itemDouble是1370437809.00的时候itemDateStr is 2013-06-05 21:10:09.00。 当itemDouble的值小数位是00的时候结果是正常的,比如itemDouble是 1370437809.66的时候, itemDateStr is 2013-06-05 21:10:09.660,小数位就多了一位。

请问这是什么原因造成的?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
阿神

那我明白你的意思了。因为1s=1000ms,所以不管你设置成SS还是SSS,都是显示最终的结果,而不会截取。最终的结果是660ms,所以显示21:10:09.660而不是21:10:09.660,除非你毫秒小于100。
列如
double itemDouble = 1370437809.01;
long itemLong = (long) (itemDouble * 1000);
Date itemDate = new Date(itemLong);
String itemDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS").format(itemDate);
System.out.println(itemDateStr);

大家讲道理

请看文档

Number: For formatting, the number of pattern letters is the minimum
number of digits, and shorter numbers are zero-padded to this amount.
For parsing, the number of pattern letters is ignored unless it's
needed to separate two adjacent fields.

翻译:对于格式化来说,模式字母的数量是最小的数位,如果数位不够,则用 0 填充以达到此数量。……

但对于多于指定数位的情况,则不会进行截取

PS: .00一位的0左边补位一个0,而不是000截取前两位0

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号