在我的程序中,我收到定义时间戳的字符串,以毫秒为单位。现在我需要将其转换为正确的日期。我发现的解决方案看起来像这样:
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);
不幸的是,这会从时间戳中删除毫秒的准确度。 (我不确定时间是否准确,因为我几乎无法想到它。)
是否由于双重转换而丢失,或者它从未出现过?有办法解决这个问题吗?
答案 0 :(得分:3)
问题出在这句话中:
Date date = new Date((long)t*1000);
它首先将double
转换为长整数,从而截断小数位,然后乘以1000,这只会增加三个零。试试这个:
Date date = new Date((long)(t*1000.0));
它使用double
作为乘法的数据类型,将小数位移到整数部分,然后使小数位截断long
转换。
使用1000.0
代替1000
作为常量也会强制常量为double
类型,增加额外的确定性,即乘法将在双精度时发生。