www.999yzc.comJava 转换double为Date format string的结果不一致

( www.999yzc.com )

使用的代码如下:

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,小数位就多了一位。

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

那我明白你的意思了。因为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

(看完/读完)这篇文章有何感想! www.999yzc.com的分享…

发表评论

电子邮件地址不会被公开。 必填项已用*标注