0

为什么如果我将日期从毫秒转换为天,然后再从天转换为毫秒,此日期会更改?

例如:

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)
    ) );

将打印:

2012 年 6 月 2 日星期六 00:00:00 GMT+03:00

2012 年 6 月 1 日星期五 03:00:00 GMT+03:00

如何在此转换中保存月份中的某一天?为什么这段代码不能正常工作?

4

1 回答 1

2

当您在几天内获得日期时,日期变得不那么准确。您在 GMT+3,因此 12:00 GMT 对您来说是 3:00。从TimeUnit 类参考

兑换

public long convert(long sourceDuration, TimeUnit sourceUnit)

将给定单位中的给定持续时间转换为此单位。从更细粒度到更粗粒度的转换会截断,因此会丢失精度。例如,将 999 毫秒转换为秒的结果为 0。从粗粒度到细粒度的转换,如果参数为负数,则会在数值上溢出饱和到 Long.MIN_VALUE,如果为正数,则为 Long.MAX_VALUE。例如,要将 10 分钟转换为毫秒,请使用:TimeUnit.MILLISECONDS.convert(10L, TimeUnit.MINUTES)

于 2012-06-28T14:18:51.333 回答