为什么我将日期从毫秒转换为天,然后又从几天转换为毫秒,此日期会发生变化?
例如:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse("2012-06-02");
System.out.println(date);
Long dateAsDays = TimeUnit.MILLISECONDS.toDays(date.getTime());
System.out.println(
new Date(
TimeUnit.DAYS.toMillis(dateAsDays)
) );
将打印出来:
周六02:00 00:00:00 GMT + 03:00
Fri Jun 01 03:00:00 GMT + 03:00 2012
如何在此次转化中保存当月的日期?为什么这段代码不能正常工作?
答案 0 :(得分:2)
当您在几天内获得日期时,日期会变得不那么准确。您的格林尼治标准时间+3,所以格林尼治标准时间12:00是3点。来自TimeUnit class reference:
转换
公共长转换(long sourceDuration, TimeUnit sourceUnit)
将给定单位的给定持续时间转换为此单位。 从较细粒度到较粗粒度的转换会截断,因此会丢失精度。例如,将999毫秒转换为秒会导致0.从较粗粒度到较细粒度的转换,如果为负,则数字溢出的参数饱和为Long.MIN_VALUE,如果为正,则为Long.MAX_VALUE。 例如,要将10分钟转换为毫秒,请使用:TimeUnit.MILLISECONDS.convert(10L,TimeUnit.MINUTES)