用Java转换日期

时间:2012-06-28 14:15:37

标签: java date date-format

为什么我将日期从毫秒转换为天,然后又从几天转换为毫秒,此日期会发生变化?

例如:

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

如何在此次转化中保存当月的日期?为什么这段代码不能正常工作?

1 个答案:

答案 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)