0

在我的程序中,我收到了以毫秒为单位定义时间戳的字符串。现在我需要将其转换为正确的日期。我找到的解决方案如下所示:

String aTime = "1365504203.0269";
double t = Double.parseDouble(aTime);

Date date = new Date((long)t*1000);
SimpleDateFormat dateFormatDDMMYYYY = new SimpleDateFormat("dd.MM.yyyy");
SimpleDateFormat dateFormatHHMMssSS = new SimpleDateFormat("HH:mm:ss:SS");
String day = new String(dateFormatHHMMssSS.format(date));
String hour = new String(dateFormatDDMMYYYY.format(date));

System.out.println("The Date: "+day);
System.out.println("The Time: "+hour);

不幸的是,这从时间戳中删除了毫秒的准确性。(我不确定时间是否那么准确,因为我几乎无法再考虑它了。)

它是因为 double->long 转换而丢失了,还是根本不存在?有什么办法可以解决这个问题?

4

1 回答 1

3

问题出在这句话中:

Date date = new Date((long)t*1000);

它首先将 t 转换double为 long,从而截断小数位,然后乘以 1000,这只是添加了三个零。尝试这个:

Date date = new Date((long)(t*1000.0));

double用作乘法的数据类型,将小数位移动到整数部分,然后进行小数位截断long转换。

使用1000.0而不是1000作为常量强制常量也是double类型,增加了一个额外的确定性,即乘法将发生在双精度数上。

于 2013-04-27T18:26:58.993 回答